diff --git a/Makefile b/Makefile index eec79b5c..9536e6e6 100644 --- a/Makefile +++ b/Makefile @@ -129,6 +129,7 @@ proton: downloads echo "Proton built locally. Use 'install', 'deploy' or 'redist' targets." install: downloads + rm -rf $(STEAM_DIR)/compatibilitytools.d/$(_build_name)/files/ #remove proton's internal files, but preserve user_settings etc from top-level $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) install echo "Proton installed to your local Steam installation" @@ -167,8 +168,8 @@ dxvk: | $(BUILD_ROOT)/dxvk/lib/wine/dxvk dxvk: | $(BUILD_ROOT)/dxvk/lib64/wine/dxvk dxvk: downloads $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) dxvk && \ - cp -f $(BUILD_DIR)/dist/dist/lib/wine/dxvk/*.dll $(BUILD_ROOT)/dxvk/lib/wine/dxvk/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/dxvk/*.dll $(BUILD_ROOT)/dxvk/lib64/wine/dxvk/ + cp -f $(BUILD_DIR)/dist/files/lib/wine/dxvk/*.dll $(BUILD_ROOT)/dxvk/lib/wine/dxvk/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/dxvk/*.dll $(BUILD_ROOT)/dxvk/lib64/wine/dxvk/ dxvk-nvapi: | $(BUILD_ROOT)/dxvk-nvapi/lib/wine/nvapi dxvk-nvapi: | $(BUILD_ROOT)/dxvk-nvapi/lib64/wine/nvapi @@ -181,8 +182,8 @@ vkd3d-proton: | $(BUILD_ROOT)/vkd3d-proton/lib/wine/vkd3d-proton vkd3d-proton: | $(BUILD_ROOT)/vkd3d-proton/lib64/wine/vkd3d-proton vkd3d-proton: downloads $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) vkd3d-proton && \ - cp -f $(BUILD_DIR)/dist/dist/lib/wine/vkd3d-proton/*.dll $(BUILD_ROOT)/vkd3d-proton/lib/wine/vkd3d-proton/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/vkd3d-proton/*.dll $(BUILD_ROOT)/vkd3d-proton/lib64/wine/vkd3d-proton/ + cp -f $(BUILD_DIR)/dist/files/lib/wine/vkd3d-proton/*.dll $(BUILD_ROOT)/vkd3d-proton/lib/wine/vkd3d-proton/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/vkd3d-proton/*.dll $(BUILD_ROOT)/vkd3d-proton/lib64/wine/vkd3d-proton/ lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib/wine/i386-windows lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib/wine/i386-unix @@ -190,10 +191,10 @@ lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-windows lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-unix lsteamclient: downloads $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) lsteamclient && \ - cp -f $(BUILD_DIR)/dist/dist/lib/wine/i386-windows/lsteamclient.dll $(BUILD_ROOT)/lsteamclient/lib/wine/i386-windows/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib/wine/i386-unix/lsteamclient.dll.so $(BUILD_ROOT)/lsteamclient/lib/wine/i386-unix/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/x86_64-windows/lsteamclient.dll $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-windows/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/x86_64-unix/lsteamclient.dll.so $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-unix/ + cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-windows/lsteamclient.dll $(BUILD_ROOT)/lsteamclient/lib/wine/i386-windows/ && \ + cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-unix/lsteamclient.dll.so $(BUILD_ROOT)/lsteamclient/lib/wine/i386-unix/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-windows/lsteamclient.dll $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-windows/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-unix/lsteamclient.dll.so $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-unix/ vrclient: | $(BUILD_ROOT)/vrclient/lib/wine/i386-windows vrclient: | $(BUILD_ROOT)/vrclient/lib/wine/i386-unix @@ -201,17 +202,17 @@ vrclient: | $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-windows vrclient: | $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-unix vrclient: downloads $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) vrclient && \ - cp -f $(BUILD_DIR)/dist/dist/lib/wine/i386-windows/vrclient.dll $(BUILD_ROOT)/vrclient/lib/wine/i386-windows/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib/wine/i386-unix/vrclient.dll.so $(BUILD_ROOT)/vrclient/lib/wine/i386-unix/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/x86_64-windows/vrclient_x64.dll $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-windows/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/x86_64-unix/vrclient_x64.dll.so $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-unix/ + cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-windows/vrclient.dll $(BUILD_ROOT)/vrclient/lib/wine/i386-windows/ && \ + cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-unix/vrclient.dll.so $(BUILD_ROOT)/vrclient/lib/wine/i386-unix/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-windows/vrclient_x64.dll $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-windows/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-unix/vrclient_x64.dll.so $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-unix/ wineopenxr: | $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-windows wineopenxr: | $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-unix wineopenxr: downloads $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) wineopenxr && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/x86_64-windows/wineopenxr.dll $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-windows/ && \ - cp -f $(BUILD_DIR)/dist/dist/lib64/wine/x86_64-unix/wineopenxr.dll.so $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-unix/ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-windows/wineopenxr.dll $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-windows/ && \ + cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-unix/wineopenxr.dll.so $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-unix/ battleye: | $(BUILD_ROOT)/battleye/v1/lib/wine/i386-windows battleye: | $(BUILD_ROOT)/battleye/v1/lib/wine/i386-unix diff --git a/Makefile.in b/Makefile.in index b2dad5d9..cc1b53b4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -147,7 +147,7 @@ endif ## DST_BASE := $(OBJ)/dist -DST_DIR := $(DST_BASE)/dist +DST_DIR := $(DST_BASE)/files DST_LIBDIR32 := $(DST_DIR)/lib DST_LIBDIR64 := $(DST_DIR)/lib64 DEPLOY_DIR := ./deploy @@ -279,7 +279,7 @@ DIST_TARGETS := $(DIST_COPY_TARGETS) $(DIST_OVR32) $(DIST_OVR64) \ $(DIST_OFL_LICENSE) $(DIST_AV1_PATENTS) $(DIST_FONTS) DEPLOY_COPY_TARGETS := $(DIST_COPY_TARGETS) $(DIST_VERSION) $(DIST_LICENSE) \ - $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DIST_AV1_PATENTS) + $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DIST_AV1_PATENTS) $(DST_DIR) REDIST_COPY_TARGETS := $(DEPLOY_COPY_TARGETS) $(DIST_COMPAT_MANIFEST) $(DIST_LICENSE): $(LICENSE) @@ -375,24 +375,20 @@ dist: $(DIST_TARGETS) all-dist dist_wineopenxr | $(DST_DIR) echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION) deploy: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS)) - mkdir -p $(DEPLOY_DIR) && \ - cp -a $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR) && \ - tar -C $(DST_DIR) -c . > $(DEPLOY_DIR)/proton_dist.tar - @echo "Created deployment archive at "$(DEPLOY_DIR)"/proton_dist.tar" + mkdir -p $(DEPLOY_DIR) + cp -af --no-dereference --preserve=mode,links $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR) install: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS)) if [ ! -d $(STEAM_DIR) ]; then echo >&2 "!! "$(STEAM_DIR)" does not exist, cannot install"; return 1; fi mkdir -p $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME) + # Use -r instead of -a for sshfs cp -rf --no-dereference --preserve=mode,links $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME) - cp -f $(DIST_VERSION) $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)/dist/ @echo "Installed Proton to "$(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME) @echo "You may need to restart Steam to select this tool" redist: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS)) mkdir -p $(REDIST_DIR) - cp -a $(REDIST_COPY_TARGETS) $(REDIST_DIR) - tar -C $(DST_DIR) -c . | gzip -c -1 > $(REDIST_DIR)/proton_dist.tar.gz - @echo "Created redistribution tarball at "$(REDIST_DIR)"/proton_dist.tar.gz" + cp -af --no-dereference --preserve=mode,links $(REDIST_COPY_TARGETS) $(REDIST_DIR) .PHONY: module32 module64 module diff --git a/proton b/proton index 37dbecd0..674968a0 100755 --- a/proton +++ b/proton @@ -410,15 +410,15 @@ def set_dir_casefold_bit(dir_path): class Proton: def __init__(self, base_dir): self.base_dir = base_dir + "/" - self.dist_dir = self.path("dist/") - self.bin_dir = self.path("dist/bin/") - self.lib_dir = self.path("dist/lib/") - self.lib64_dir = self.path("dist/lib64/") - self.fonts_dir = self.path("dist/share/fonts/") - self.wine_fonts_dir = self.path("dist/share/wine/fonts/") - self.wine_inf = self.path("dist/share/wine/wine.inf") + self.dist_dir = self.path("files/") + self.bin_dir = self.path("files/bin/") + self.lib_dir = self.path("files/lib/") + self.lib64_dir = self.path("files/lib64/") + self.fonts_dir = self.path("files/share/fonts/") + self.wine_fonts_dir = self.path("files/share/wine/fonts/") + self.wine_inf = self.path("files/share/wine/wine.inf") self.version_file = self.path("version") - self.default_pfx_dir = self.path("dist/share/default_pfx/") + self.default_pfx_dir = self.path("files/share/default_pfx/") self.user_settings_file = self.path("user_settings.py") self.wine_bin = self.bin_dir + "wine" self.wine64_bin = self.bin_dir + "wine64" @@ -428,28 +428,12 @@ class Proton: def path(self, d): return self.base_dir + d - def need_tarball_extraction(self): - '''Checks if the proton_dist tarball archive must be extracted. Returns true if extraction is needed, false otherwise''' - return not file_exists(self.dist_dir, follow_symlinks=True) or \ - not file_exists(self.path("dist/version"), follow_symlinks=True) or \ - not filecmp.cmp(self.version_file, self.path("dist/version")) - - def extract_tarball(self): - with self.dist_lock: - if self.need_tarball_extraction(): - if file_exists(self.dist_dir, follow_symlinks=True): - shutil.rmtree(self.dist_dir) - tar = None - for sf in ["", ".xz", ".bz2", ".gz"]: - if file_exists(self.path("proton_dist.tar" + sf), follow_symlinks=True): - tar = tarfile.open(self.path("proton_dist.tar" + sf), mode="r:*") - break - if not tar: - log("No proton_dist tarball??") - sys.exit(1) - tar.extractall(path=self.dist_dir) - tar.close() - try_copy(self.version_file, self.dist_dir) + def cleanup_legacy_dist(self): + old_dist_dir = self.path("dist/") + if file_exists(old_dist_dir, follow_symlinks=True): + with self.dist_lock: + if file_exists(old_dist_dir, follow_symlinks=True): + shutil.rmtree(old_dist_dir) def missing_default_prefix(self): '''Check if the default prefix dir is missing. Returns true if missing, false if present''' @@ -1518,8 +1502,7 @@ if __name__ == "__main__": g_proton = Proton(os.path.dirname(sys.argv[0])) - if g_proton.need_tarball_extraction(): - g_proton.extract_tarball() + g_proton.cleanup_legacy_dist() g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"])