#!/usr/bin/env python
import os
import sys
import shutil
from forwardfilesync import *
# import filever
from pyenliven import (
echo0 ,
)
if sys . version_info . major > = 3 :
pass
else :
input = raw_input
def rm_sub ( bad_sub ) :
bad_path = path_join_all ( deploy_path , bad_sub )
if os . path . isfile ( bad_path ) :
os . remove ( bad_path )
def main ( ) :
warnings = list ( )
echo0 ( " " )
echo0 ( " This script is NOT YET IMPLEMENTED " )
# TODO: Scrape https://minetest.kitsunemimi.pw/builds/ (NOTE: stable is
# always "https://minetest.kitsunemimi.pw/builds/win64/"
# "minetest-0.4.15-win64.7z")
echo0 ( " This script patches minetest and minetest_game with ENLIVEN \n " +
" (such as launcher and subgame) and creates a Windows installer. " )
script_dir_path = os . path . dirname ( os . path . abspath ( __file__ ) )
enliven_project_path = os . path . dirname ( script_dir_path )
profile_path = None
if " HOME " in os . environ :
profile_path = os . environ [ " HOME " ]
elif " USERPROFILE " in os . environ :
profile_path = os . environ [ " USERPROFILE " ]
else :
raise ValueError (
" HOME and USERPROFILE aren ' t set. This should never happen. "
)
'''
try_path = " C: \\ Users \\ jgustafson "
if not os . path . isdir ( try_path ) :
try_path = " C: \\ Users \\ Owner "
echo0 ( " WARNING: no HOME or USERPROFILE found, reverting to ' " +
try_path + " ' " )
profile_path = try_path
'''
# TODO: Make a settings file for values in the next region.
# region user settings
deploy_path = " C: \\ Games \\ ENLIVEN-deploy "
'''
try_path = " C: \\ Games \\ Minetest "
if ( not os . path . isdir ( deploy_path ) ) :
if os . path . isdir ( try_path ) :
deploy_path = try_path
# else make the default one further down
'''
# ^ The path must match the one in projects/setup-ENLIVEN-win64.iss
installer_deploy_path = path_join_all ( [ profile_path , " Nextcloud " , " www " ,
" expertmultimedia " , " downloads " ] )
installer_name = " install-ENLIVEN.exe "
# endregion user settings
installer_path = os . path . join ( installer_deploy_path , installer_name )
if not os . path . isdir ( installer_deploy_path ) :
echo0 ( " #WARNING: does not exist: " )
print ( " installer_deploy_path: " + installer_deploy_path )
# this is a waste--it just shows 0.0.0.0 though iss file has version
# if os.path.isfile(installer_path):
# numbers=filever.get_version_number(installer_path)
# major,minor,subminor,revision = numbers
# print(".".join([str (i) for i in numbers]))
if not os . path . isdir ( deploy_path ) :
if platform . system ( ) != " Windows " :
raise RuntimeError (
" A proper tmp deploy path for {} is not defined. "
" " . format ( platform . system ( ) )
)
os . makedirs ( deploy_path )
games_path = os . path . join ( deploy_path , " games " )
minetest_game_path = os . path . join ( games_path , " minetest_game " )
minetest_game_mods_path = os . path . join ( minetest_game_path , " mods " )
if not os . path . isdir ( minetest_game_path ) :
echo0 ( " This deploy script requires an unmodified build of minetest and \n " +
" minetest_game. Please place an unmodified build of minetest in \n " +
" " + deploy_path + " so that minetest_game is at: \n \n " +
" " + minetest_game_path + " \n \n " )
return 1
game_path = os . path . join ( games_path , " ENLIVEN " )
# NOTE: remove this case, and instead: copy minetest_game, download ENLIVEN
# automatically
if not os . path . isdir ( game_path ) :
echo0 ( " " )
echo0 ( " ERROR: ENLIVEN must first be installed from web sources " +
" using the provided ' install ' script in the etc/change* " +
" folder (run on linux then copy to a Windows machine " +
" in " + game_path )
# return 2
else :
print ( " game_path: " + game_path )
mods_path = os . path . join ( game_path , " mods " )
if not os . path . isdir ( mods_path ) :
os . makedirs ( mods_path )
mtg_list_path = os . path . join ( game_path , " minetest_game-mod-list.txt " )
mtg_list_out = open ( mtg_list_path , ' w ' )
folder_path = minetest_game_mods_path
if os . path . isdir ( folder_path ) :
for sub_name in os . listdir ( folder_path ) :
sub_path = os . path . join ( folder_path , sub_name )
if sub_name [ : 1 ] != " . " and os . path . isdir ( sub_path ) :
mtg_list_out . write ( sub_name + " \n " )
mtg_list_out . close ( )
# TODO: uncomment this: update_tree(minetest_game_path, game_path)
server_devel_minetest_conf_path = os . path . join (
game_path ,
" minetest.conf.ENLIVEN-server "
)
server_minetest_conf_path = os . path . join ( game_path , " minetest.conf " )
if not os . path . isfile ( server_devel_minetest_conf_path ) :
warnings . append ( server_devel_minetest_conf_path + " was not found " )
else :
shutil . copyfile ( server_devel_minetest_conf_path ,
server_minetest_conf_path )
rm_sub ( [ " CC-BY-SA 3.0 Unported (fallback license for ENLIVEN assets) "
" .txt " ] )
rm_sub ( [ " MIT LICENSE (fallback license for ENLIVEN code).txt " ] )
# NOTE: At this point, the following LICENSE and README files are
# minetest_game's and the following are intentionally looking in
# C:\games\ENLIVEN\games\ENLIVEN:
# rm_sub(["games", "ENLIVEN", "LICENSE.txt"])
# rm_sub(["games", "ENLIVEN", "README.txt"])
echo0 ( " " )
if len ( warnings ) > 0 :
echo0 ( str ( len ( warnings ) ) + " warning(s): " )
for warning in warnings :
echo0 ( warning )
else :
echo0 ( " 0 warnings. " )
echo0 ( )
return 0
if __name__ == " __main__ " :
sys . exit ( main ( ) )