import os, sys
import panda3d

dir = os.path.dirname(panda3d.__file__)
del panda3d

if sys.platform in ('win32', 'cygwin'):
    path_var = 'PATH'
    if hasattr(os, 'add_dll_directory'):
        os.add_dll_directory(dir)
elif sys.platform == 'darwin':
    path_var = 'DYLD_LIBRARY_PATH'
else:
    path_var = 'LD_LIBRARY_PATH'

if not os.environ.get(path_var):
    os.environ[path_var] = dir
else:
    os.environ[path_var] = dir + os.pathsep + os.environ[path_var]

del os, sys, path_var, dir


def _exec_tool(tool):
    import os, sys
    from subprocess import Popen
    tools_dir = os.path.dirname(__file__)
    handle = Popen(sys.argv, executable=os.path.join(tools_dir, tool))
    try:
        try:
            return handle.wait()
        except KeyboardInterrupt:
            # Give the program a chance to handle the signal gracefully.
            return handle.wait()
    except:
        handle.kill()
        handle.wait()
        raise

# Register all the executables in this directory as global functions.
apply_patch = lambda: _exec_tool('apply_patch.exe')
bam_info = lambda: _exec_tool('bam-info.exe')
bam2egg = lambda: _exec_tool('bam2egg.exe')
build_patch = lambda: _exec_tool('build_patch.exe')
cginfo = lambda: _exec_tool('cginfo.exe')
check_adler = lambda: _exec_tool('check_adler.exe')
check_crc = lambda: _exec_tool('check_crc.exe')
check_md5 = lambda: _exec_tool('check_md5.exe')
dae2egg = lambda: _exec_tool('dae2egg.exe')
deploy_stub = lambda: _exec_tool('deploy-stub.exe')
deploy_stubw = lambda: _exec_tool('deploy-stubw.exe')
dxf_points = lambda: _exec_tool('dxf-points.exe')
dxf2egg = lambda: _exec_tool('dxf2egg.exe')
egg_crop = lambda: _exec_tool('egg-crop.exe')
egg_list_textures = lambda: _exec_tool('egg-list-textures.exe')
egg_make_tube = lambda: _exec_tool('egg-make-tube.exe')
egg_mkfont = lambda: _exec_tool('egg-mkfont.exe')
egg_optchar = lambda: _exec_tool('egg-optchar.exe')
egg_palettize = lambda: _exec_tool('egg-palettize.exe')
egg_qtess = lambda: _exec_tool('egg-qtess.exe')
egg_rename = lambda: _exec_tool('egg-rename.exe')
egg_retarget_anim = lambda: _exec_tool('egg-retarget-anim.exe')
egg_texture_cards = lambda: _exec_tool('egg-texture-cards.exe')
egg_topstrip = lambda: _exec_tool('egg-topstrip.exe')
egg_trans = lambda: _exec_tool('egg-trans.exe')
egg2bam = lambda: _exec_tool('egg2bam.exe')
egg2c = lambda: _exec_tool('egg2c.exe')
egg2dxf = lambda: _exec_tool('egg2dxf.exe')
egg2flt = lambda: _exec_tool('egg2flt.exe')
egg2maya2008 = lambda: _exec_tool('egg2maya2008.exe')
egg2maya2009 = lambda: _exec_tool('egg2maya2009.exe')
egg2maya2011 = lambda: _exec_tool('egg2maya2011.exe')
egg2maya2012 = lambda: _exec_tool('egg2maya2012.exe')
egg2maya2013 = lambda: _exec_tool('egg2maya2013.exe')
egg2maya2014 = lambda: _exec_tool('egg2maya2014.exe')
egg2maya2015 = lambda: _exec_tool('egg2maya2015.exe')
egg2maya2016 = lambda: _exec_tool('egg2maya2016.exe')
egg2maya20165 = lambda: _exec_tool('egg2maya20165.exe')
egg2maya2017 = lambda: _exec_tool('egg2maya2017.exe')
egg2maya2018 = lambda: _exec_tool('egg2maya2018.exe')
egg2maya2019 = lambda: _exec_tool('egg2maya2019.exe')
egg2maya2020 = lambda: _exec_tool('egg2maya2020.exe')
egg2maya2022 = lambda: _exec_tool('egg2maya2022.exe')
egg2maya85 = lambda: _exec_tool('egg2maya85.exe')
egg2obj = lambda: _exec_tool('egg2obj.exe')
egg2x = lambda: _exec_tool('egg2x.exe')
ffmpeg = lambda: _exec_tool('ffmpeg.exe')
ffplay = lambda: _exec_tool('ffplay.exe')
ffprobe = lambda: _exec_tool('ffprobe.exe')
flt_info = lambda: _exec_tool('flt-info.exe')
flt_trans = lambda: _exec_tool('flt-trans.exe')
flt2egg = lambda: _exec_tool('flt2egg.exe')
fltcopy = lambda: _exec_tool('fltcopy.exe')
image_info = lambda: _exec_tool('image-info.exe')
image_resize = lambda: _exec_tool('image-resize.exe')
image_trans = lambda: _exec_tool('image-trans.exe')
interrogate = lambda: _exec_tool('interrogate.exe')
interrogate_module = lambda: _exec_tool('interrogate_module.exe')
lwo_scan = lambda: _exec_tool('lwo-scan.exe')
lwo2egg = lambda: _exec_tool('lwo2egg.exe')
make_prc_key = lambda: _exec_tool('make-prc-key.exe')
maya2egg2008 = lambda: _exec_tool('maya2egg2008.exe')
maya2egg2009 = lambda: _exec_tool('maya2egg2009.exe')
maya2egg2011 = lambda: _exec_tool('maya2egg2011.exe')
maya2egg2012 = lambda: _exec_tool('maya2egg2012.exe')
maya2egg2013 = lambda: _exec_tool('maya2egg2013.exe')
maya2egg2014 = lambda: _exec_tool('maya2egg2014.exe')
maya2egg2015 = lambda: _exec_tool('maya2egg2015.exe')
maya2egg2016 = lambda: _exec_tool('maya2egg2016.exe')
maya2egg20165 = lambda: _exec_tool('maya2egg20165.exe')
maya2egg2017 = lambda: _exec_tool('maya2egg2017.exe')
maya2egg2018 = lambda: _exec_tool('maya2egg2018.exe')
maya2egg2019 = lambda: _exec_tool('maya2egg2019.exe')
maya2egg2020 = lambda: _exec_tool('maya2egg2020.exe')
maya2egg2022 = lambda: _exec_tool('maya2egg2022.exe')
maya2egg85 = lambda: _exec_tool('maya2egg85.exe')
mayacopy2008 = lambda: _exec_tool('mayacopy2008.exe')
mayacopy2009 = lambda: _exec_tool('mayacopy2009.exe')
mayacopy2011 = lambda: _exec_tool('mayacopy2011.exe')
mayacopy2012 = lambda: _exec_tool('mayacopy2012.exe')
mayacopy2013 = lambda: _exec_tool('mayacopy2013.exe')
mayacopy2014 = lambda: _exec_tool('mayacopy2014.exe')
mayacopy2015 = lambda: _exec_tool('mayacopy2015.exe')
mayacopy2016 = lambda: _exec_tool('mayacopy2016.exe')
mayacopy20165 = lambda: _exec_tool('mayacopy20165.exe')
mayacopy2017 = lambda: _exec_tool('mayacopy2017.exe')
mayacopy2018 = lambda: _exec_tool('mayacopy2018.exe')
mayacopy2019 = lambda: _exec_tool('mayacopy2019.exe')
mayacopy2020 = lambda: _exec_tool('mayacopy2020.exe')
mayacopy2022 = lambda: _exec_tool('mayacopy2022.exe')
mayacopy85 = lambda: _exec_tool('mayacopy85.exe')
multify = lambda: _exec_tool('multify.exe')
obj2egg = lambda: _exec_tool('obj2egg.exe')
p3dcparse = lambda: _exec_tool('p3dcparse.exe')
parse_file = lambda: _exec_tool('parse_file.exe')
pdecrypt = lambda: _exec_tool('pdecrypt.exe')
pencrypt = lambda: _exec_tool('pencrypt.exe')
pfm_bba = lambda: _exec_tool('pfm-bba.exe')
pfm_trans = lambda: _exec_tool('pfm-trans.exe')
pstats = lambda: _exec_tool('pstats.exe')
punzip = lambda: _exec_tool('punzip.exe')
pview = lambda: _exec_tool('pview.exe')
pzip = lambda: _exec_tool('pzip.exe')
show_ddb = lambda: _exec_tool('show_ddb.exe')
test_interrogate = lambda: _exec_tool('test_interrogate.exe')
text_stats = lambda: _exec_tool('text-stats.exe')
vrml_trans = lambda: _exec_tool('vrml-trans.exe')
vrml2egg = lambda: _exec_tool('vrml2egg.exe')
x_trans = lambda: _exec_tool('x-trans.exe')
x2egg = lambda: _exec_tool('x2egg.exe')