From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 5F0881580FD for ; Tue, 24 Dec 2024 15:45:03 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 810A3E0817; Tue, 24 Dec 2024 15:45:02 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 5D803E0817 for ; Tue, 24 Dec 2024 15:45:02 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 509FD33BEED for ; Tue, 24 Dec 2024 15:45:01 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 4C8A61048 for ; Tue, 24 Dec 2024 15:44:59 +0000 (UTC) From: "Matthew Thode" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Matthew Thode" Message-ID: <1735055055.a71e1e4a0907b3172edb767c0eac01fe508e5ef1.prometheanfire@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: app-arch/p7zip/, app-arch/p7zip/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: app-arch/p7zip/files/p7zip-17.05-localization.patch app-arch/p7zip/p7zip-17.05-r2.ebuild X-VCS-Directories: app-arch/p7zip/files/ app-arch/p7zip/ X-VCS-Committer: prometheanfire X-VCS-Committer-Name: Matthew Thode X-VCS-Revision: a71e1e4a0907b3172edb767c0eac01fe508e5ef1 X-VCS-Branch: master Date: Tue, 24 Dec 2024 15:44:59 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 13bc848e-1efa-4821-962d-6e55ca1bdf0f X-Archives-Hash: 0561c052270116cd40de453808ff94c4 commit: a71e1e4a0907b3172edb767c0eac01fe508e5ef1 Author: Matthew Thode gentoo org> AuthorDate: Tue Dec 24 15:44:15 2024 +0000 Commit: Matthew Thode gentoo org> CommitDate: Tue Dec 24 15:44:15 2024 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a71e1e4a app-arch/p7zip: localization patch backport Closes: https://bugs.gentoo.org/946122 Signed-off-by: Matthew Thode gentoo.org> .../p7zip/files/p7zip-17.05-localization.patch | 234 +++++++++++++++++++++ app-arch/p7zip/p7zip-17.05-r2.ebuild | 114 ++++++++++ 2 files changed, 348 insertions(+) diff --git a/app-arch/p7zip/files/p7zip-17.05-localization.patch b/app-arch/p7zip/files/p7zip-17.05-localization.patch new file mode 100644 index 000000000000..971a0d4eb8bb --- /dev/null +++ b/app-arch/p7zip/files/p7zip-17.05-localization.patch @@ -0,0 +1,234 @@ +From afec5e119df1f0706df619b6151b709945de4f43 Mon Sep 17 00:00:00 2001 +From: Ivan Sorokin +Date: Wed, 22 May 2024 09:38:23 +0200 +Subject: [PATCH] apply #232 to p7zip17 also + +--- + CPP/7zip/Archive/Zip/ZipItem.cpp | 205 +++++++++++++++++++++---------- + 1 file changed, 137 insertions(+), 68 deletions(-) + +diff --git a/CPP/7zip/Archive/Zip/ZipItem.cpp b/CPP/7zip/Archive/Zip/ZipItem.cpp +index 353e89559..d3133c59d 100644 +--- a/CPP/7zip/Archive/Zip/ZipItem.cpp ++++ b/CPP/7zip/Archive/Zip/ZipItem.cpp +@@ -356,83 +356,152 @@ void CItem::GetUnicodeString(UString &res, const AString &s, bool isComment, boo + } + + #if (!defined _WIN32) && (!defined __CYGWIN__) && (!defined __APPLE__) ++ + // Convert OEM char set to UTF-8 if needed + // Use system locale to select code page + +- Byte hostOS = GetHostOS(); +- if (!isUtf8 && ((hostOS == NFileHeader::NHostOS::kFAT) || (hostOS == NFileHeader::NHostOS::kNTFS))) { +- +- const char *oemcp; +- oemcp = getenv("OEMCP"); +- if (!oemcp) { +- oemcp = "CP437\0"; // CP name is 6 chars max +- +- const char *lc_to_cp_table[] = { +- "af_ZA", "CP850", "ar_SA", "CP720", "ar_LB", "CP720", "ar_EG", "CP720", +- "ar_DZ", "CP720", "ar_BH", "CP720", "ar_IQ", "CP720", "ar_JO", "CP720", +- "ar_KW", "CP720", "ar_LY", "CP720", "ar_MA", "CP720", "ar_OM", "CP720", +- "ar_QA", "CP720", "ar_SY", "CP720", "ar_TN", "CP720", "ar_AE", "CP720", +- "ar_YE", "CP720","ast_ES", "CP850", "az_AZ", "CP866", "az_AZ", "CP857", +- "be_BY", "CP866", "bg_BG", "CP866", "br_FR", "CP850", "ca_ES", "CP850", +- "zh_CN", "CP936", "zh_TW", "CP950", "kw_GB", "CP850", "cs_CZ", "CP852", +- "cy_GB", "CP850", "da_DK", "CP850", "de_AT", "CP850", "de_LI", "CP850", +- "de_LU", "CP850", "de_CH", "CP850", "de_DE", "CP850", "el_GR", "CP737", +- "en_AU", "CP850", "en_CA", "CP850", "en_GB", "CP850", "en_IE", "CP850", +- "en_JM", "CP850", "en_BZ", "CP850", "en_PH", "CP437", "en_ZA", "CP437", +- "en_TT", "CP850", "en_US", "CP437", "en_ZW", "CP437", "en_NZ", "CP850", +- "es_PA", "CP850", "es_BO", "CP850", "es_CR", "CP850", "es_DO", "CP850", +- "es_SV", "CP850", "es_EC", "CP850", "es_GT", "CP850", "es_HN", "CP850", +- "es_NI", "CP850", "es_CL", "CP850", "es_MX", "CP850", "es_ES", "CP850", +- "es_CO", "CP850", "es_ES", "CP850", "es_PE", "CP850", "es_AR", "CP850", +- "es_PR", "CP850", "es_VE", "CP850", "es_UY", "CP850", "es_PY", "CP850", +- "et_EE", "CP775", "eu_ES", "CP850", "fa_IR", "CP720", "fi_FI", "CP850", +- "fo_FO", "CP850", "fr_FR", "CP850", "fr_BE", "CP850", "fr_CA", "CP850", +- "fr_LU", "CP850", "fr_MC", "CP850", "fr_CH", "CP850", "ga_IE", "CP437", +- "gd_GB", "CP850", "gv_IM", "CP850", "gl_ES", "CP850", "he_IL", "CP862", +- "hr_HR", "CP852", "hu_HU", "CP852", "id_ID", "CP850", "is_IS", "CP850", +- "it_IT", "CP850", "it_CH", "CP850", "iv_IV", "CP437", "ja_JP", "CP932", +- "kk_KZ", "CP866", "ko_KR", "CP949", "ky_KG", "CP866", "lt_LT", "CP775", +- "lv_LV", "CP775", "mk_MK", "CP866", "mn_MN", "CP866", "ms_BN", "CP850", +- "ms_MY", "CP850", "nl_BE", "CP850", "nl_NL", "CP850", "nl_SR", "CP850", +- "nn_NO", "CP850", "nb_NO", "CP850", "pl_PL", "CP852", "pt_BR", "CP850", +- "pt_PT", "CP850", "rm_CH", "CP850", "ro_RO", "CP852", "ru_RU", "CP866", +- "sk_SK", "CP852", "sl_SI", "CP852", "sq_AL", "CP852", "sr_RS", "CP855", +- "sr_RS", "CP852", "sv_SE", "CP850", "sv_FI", "CP850", "sw_KE", "CP437", +- "th_TH", "CP874", "tr_TR", "CP857", "tt_RU", "CP866", "uk_UA", "CP866", +- "ur_PK", "CP720", "uz_UZ", "CP866", "uz_UZ", "CP857", "vi_VN", "CP1258", +- "wa_BE", "CP850", "zh_HK", "CP950", "zh_SG", "CP936"}; +- int table_len = sizeof(lc_to_cp_table) / sizeof(char *); +- int lc_len, i; +- +- char *lc = setlocale(LC_CTYPE, ""); +- +- if (lc && lc[0]) { +- // Compare up to the dot, if it exists, e.g. en_US.UTF-8 +- for (lc_len = 0; lc[lc_len] != '.' && lc[lc_len] != '\0'; ++lc_len) +- ; +- for (i = 0; i < table_len; i += 2) +- if (strncmp(lc, lc_to_cp_table[i], lc_len) == 0) +- oemcp = lc_to_cp_table[i + 1]; +- } ++ // locale -> code page translation tables generated from Wine source code ++ ++ const char *lcToOemTable[] = { ++ "af_ZA", "CP850", "ar_SA", "CP720", "ar_LB", "CP720", "ar_EG", "CP720", ++ "ar_DZ", "CP720", "ar_BH", "CP720", "ar_IQ", "CP720", "ar_JO", "CP720", ++ "ar_KW", "CP720", "ar_LY", "CP720", "ar_MA", "CP720", "ar_OM", "CP720", ++ "ar_QA", "CP720", "ar_SY", "CP720", "ar_TN", "CP720", "ar_AE", "CP720", ++ "ar_YE", "CP720", "ast_ES", "CP850", "az_AZ", "CP866", "az_AZ", "CP857", ++ "be_BY", "CP866", "bg_BG", "CP866", "br_FR", "CP850", "ca_ES", "CP850", ++ "zh_CN", "CP936", "zh_TW", "CP950", "kw_GB", "CP850", "cs_CZ", "CP852", ++ "cy_GB", "CP850", "da_DK", "CP850", "de_AT", "CP850", "de_LI", "CP850", ++ "de_LU", "CP850", "de_CH", "CP850", "de_DE", "CP850", "el_GR", "CP737", ++ "en_AU", "CP850", "en_CA", "CP850", "en_GB", "CP850", "en_IE", "CP850", ++ "en_JM", "CP850", "en_BZ", "CP850", "en_PH", "CP437", "en_ZA", "CP437", ++ "en_TT", "CP850", "en_US", "CP437", "en_ZW", "CP437", "en_NZ", "CP850", ++ "es_PA", "CP850", "es_BO", "CP850", "es_CR", "CP850", "es_DO", "CP850", ++ "es_SV", "CP850", "es_EC", "CP850", "es_GT", "CP850", "es_HN", "CP850", ++ "es_NI", "CP850", "es_CL", "CP850", "es_MX", "CP850", "es_ES", "CP850", ++ "es_CO", "CP850", "es_ES", "CP850", "es_PE", "CP850", "es_AR", "CP850", ++ "es_PR", "CP850", "es_VE", "CP850", "es_UY", "CP850", "es_PY", "CP850", ++ "et_EE", "CP775", "eu_ES", "CP850", "fa_IR", "CP720", "fi_FI", "CP850", ++ "fo_FO", "CP850", "fr_FR", "CP850", "fr_BE", "CP850", "fr_CA", "CP850", ++ "fr_LU", "CP850", "fr_MC", "CP850", "fr_CH", "CP850", "ga_IE", "CP437", ++ "gd_GB", "CP850", "gv_IM", "CP850", "gl_ES", "CP850", "he_IL", "CP862", ++ "hr_HR", "CP852", "hu_HU", "CP852", "id_ID", "CP850", "is_IS", "CP850", ++ "it_IT", "CP850", "it_CH", "CP850", "iv_IV", "CP437", "ja_JP", "CP932", ++ "kk_KZ", "CP866", "ko_KR", "CP949", "ky_KG", "CP866", "lt_LT", "CP775", ++ "lv_LV", "CP775", "mk_MK", "CP866", "mn_MN", "CP866", "ms_BN", "CP850", ++ "ms_MY", "CP850", "nl_BE", "CP850", "nl_NL", "CP850", "nl_SR", "CP850", ++ "nn_NO", "CP850", "nb_NO", "CP850", "pl_PL", "CP852", "pt_BR", "CP850", ++ "pt_PT", "CP850", "rm_CH", "CP850", "ro_RO", "CP852", "ru_RU", "CP866", ++ "sk_SK", "CP852", "sl_SI", "CP852", "sq_AL", "CP852", "sr_RS", "CP855", ++ "sr_RS", "CP852", "sv_SE", "CP850", "sv_FI", "CP850", "sw_KE", "CP437", ++ "th_TH", "CP874", "tr_TR", "CP857", "tt_RU", "CP866", "uk_UA", "CP866", ++ "ur_PK", "CP720", "uz_UZ", "CP866", "uz_UZ", "CP857", "vi_VN", "CP1258", ++ "wa_BE", "CP850", "zh_HK", "CP950", "zh_SG", "CP936"}; ++ ++ const char *lcToAnsiTable[] = { ++ "af_ZA", "CP1252", "ar_SA", "CP1256", "ar_LB", "CP1256", "ar_EG", "CP1256", ++ "ar_DZ", "CP1256", "ar_BH", "CP1256", "ar_IQ", "CP1256", "ar_JO", "CP1256", ++ "ar_KW", "CP1256", "ar_LY", "CP1256", "ar_MA", "CP1256", "ar_OM", "CP1256", ++ "ar_QA", "CP1256", "ar_SY", "CP1256", "ar_TN", "CP1256", "ar_AE", "CP1256", ++ "ar_YE", "CP1256","ast_ES", "CP1252", "az_AZ", "CP1251", "az_AZ", "CP1254", ++ "be_BY", "CP1251", "bg_BG", "CP1251", "br_FR", "CP1252", "ca_ES", "CP1252", ++ "zh_CN", "CP936", "zh_TW", "CP950", "kw_GB", "CP1252", "cs_CZ", "CP1250", ++ "cy_GB", "CP1252", "da_DK", "CP1252", "de_AT", "CP1252", "de_LI", "CP1252", ++ "de_LU", "CP1252", "de_CH", "CP1252", "de_DE", "CP1252", "el_GR", "CP1253", ++ "en_AU", "CP1252", "en_CA", "CP1252", "en_GB", "CP1252", "en_IE", "CP1252", ++ "en_JM", "CP1252", "en_BZ", "CP1252", "en_PH", "CP1252", "en_ZA", "CP1252", ++ "en_TT", "CP1252", "en_US", "CP1252", "en_ZW", "CP1252", "en_NZ", "CP1252", ++ "es_PA", "CP1252", "es_BO", "CP1252", "es_CR", "CP1252", "es_DO", "CP1252", ++ "es_SV", "CP1252", "es_EC", "CP1252", "es_GT", "CP1252", "es_HN", "CP1252", ++ "es_NI", "CP1252", "es_CL", "CP1252", "es_MX", "CP1252", "es_ES", "CP1252", ++ "es_CO", "CP1252", "es_ES", "CP1252", "es_PE", "CP1252", "es_AR", "CP1252", ++ "es_PR", "CP1252", "es_VE", "CP1252", "es_UY", "CP1252", "es_PY", "CP1252", ++ "et_EE", "CP1257", "eu_ES", "CP1252", "fa_IR", "CP1256", "fi_FI", "CP1252", ++ "fo_FO", "CP1252", "fr_FR", "CP1252", "fr_BE", "CP1252", "fr_CA", "CP1252", ++ "fr_LU", "CP1252", "fr_MC", "CP1252", "fr_CH", "CP1252", "ga_IE", "CP1252", ++ "gd_GB", "CP1252", "gv_IM", "CP1252", "gl_ES", "CP1252", "he_IL", "CP1255", ++ "hr_HR", "CP1250", "hu_HU", "CP1250", "id_ID", "CP1252", "is_IS", "CP1252", ++ "it_IT", "CP1252", "it_CH", "CP1252", "iv_IV", "CP1252", "ja_JP", "CP932", ++ "kk_KZ", "CP1251", "ko_KR", "CP949", "ky_KG", "CP1251", "lt_LT", "CP1257", ++ "lv_LV", "CP1257", "mk_MK", "CP1251", "mn_MN", "CP1251", "ms_BN", "CP1252", ++ "ms_MY", "CP1252", "nl_BE", "CP1252", "nl_NL", "CP1252", "nl_SR", "CP1252", ++ "nn_NO", "CP1252", "nb_NO", "CP1252", "pl_PL", "CP1250", "pt_BR", "CP1252", ++ "pt_PT", "CP1252", "rm_CH", "CP1252", "ro_RO", "CP1250", "ru_RU", "CP1251", ++ "sk_SK", "CP1250", "sl_SI", "CP1250", "sq_AL", "CP1250", "sr_RS", "CP1251", ++ "sr_RS", "CP1250", "sv_SE", "CP1252", "sv_FI", "CP1252", "sw_KE", "CP1252", ++ "th_TH", "CP874", "tr_TR", "CP1254", "tt_RU", "CP1251", "uk_UA", "CP1251", ++ "ur_PK", "CP1256", "uz_UZ", "CP1251", "uz_UZ", "CP1254", "vi_VN", "CP1258", ++ "wa_BE", "CP1252", "zh_HK", "CP950", "zh_SG", "CP936"}; ++ ++ bool isAnsi = false; ++ bool isOem = false; ++ ++ if (!isUtf8 && ++ MadeByVersion.HostOS == NFileHeader::NHostOS::kNTFS && ++ MadeByVersion.Version >= 20) { ++ isAnsi = true; ++ } else if (!isUtf8 && ++ (MadeByVersion.HostOS == NFileHeader::NHostOS::kNTFS || ++ MadeByVersion.HostOS == NFileHeader::NHostOS::kFAT)) { ++ isOem = true; ++ } ++ ++ if (isOem || isAnsi) { ++ ++ const char *legacyCp = nullptr; ++ int tableLen = sizeof(isOem ? lcToOemTable : lcToAnsiTable) / sizeof(char *); ++ int lcLen = 0, i; ++ ++ // Detect required code page name from current locale ++ char *lc = setlocale(LC_CTYPE, ""); ++ ++ if (lc && lc[0]) { ++ // Compare up to the dot, if it exists, e.g. en_US.UTF-8 ++ for (lcLen = 0; lc[lcLen] != '.' && lc[lcLen] != ':' && lc[lcLen] != '\0'; ++lcLen); ++ ++ for (i = 0; i < tableLen; i += 2) ++ if (strncmp(lc, (isOem ? lcToOemTable[i] : lcToAnsiTable[i]), lcLen) == 0) { ++ legacyCp = isOem ? lcToOemTable[i + 1] : lcToAnsiTable[i + 1]; ++ break; // Stop searching once a match is found ++ } + } + +- iconv_t cd; +- if ((cd = iconv_open("UTF-8", oemcp)) != (iconv_t)-1) { ++ if (legacyCp) { ++ iconv_t cd; ++ if ((cd = iconv_open("UTF-8", legacyCp)) != (iconv_t)-1) { + +- AString s_utf8; +- const char* src = s.Ptr(); +- size_t slen = s.Len(); +- size_t dlen = slen * 4; +- const char* dest = s_utf8.GetBuf_SetEnd(dlen + 1); // (source length * 4) + null termination ++ AString sUtf8; + +- size_t done = iconv(cd, (char**)&src, &slen, (char**)&dest, &dlen); +- bzero((size_t*)dest + done, 1); ++ size_t slen = s.Len(); ++ char* src = const_cast(s.Ptr()); + +- iconv_close(cd); ++ size_t dlen = slen * 4 + 1; // (source length * 4) + null termination ++ char* dst = sUtf8.GetBuf_SetEnd(dlen); ++ const char* dstStart = dst; + +- if (ConvertUTF8ToUnicode(s_utf8, res) || ignore_Utf8_Errors) +- return; +- } ++ memset(dst, 0, dlen); ++ ++ size_t done = iconv(cd, &src, &slen, &dst, &dlen); ++ ++ if (done == (size_t)-1) { ++ iconv_close(cd); ++ ++ // iconv failed. Falling back to default behavior ++ MultiByteToUnicodeString2(res, s, useSpecifiedCodePage ? codePage : GetCodePage()); ++ return; ++ } ++ ++ // Null-terminate the result ++ *dst = '\0'; ++ ++ iconv_close(cd); ++ ++ AString sUtf8CorrectLength; ++ unsigned dstCorrectLength = dst - dstStart; ++ sUtf8CorrectLength.SetFrom(sUtf8, dstCorrectLength); ++ if (ConvertUTF8ToUnicode(sUtf8CorrectLength, res) /*|| ignore_Utf8_Errors*/) ++ return; ++ } ++ } + } + #endif + diff --git a/app-arch/p7zip/p7zip-17.05-r2.ebuild b/app-arch/p7zip/p7zip-17.05-r2.ebuild new file mode 100644 index 000000000000..c3cf8085fcf6 --- /dev/null +++ b/app-arch/p7zip/p7zip-17.05-r2.ebuild @@ -0,0 +1,114 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit multilib toolchain-funcs wrapper xdg + +DESCRIPTION="Port of 7-Zip archiver for Unix" +HOMEPAGE="https://github.com/p7zip-project/p7zip" +SRC_URI="https://github.com/p7zip-project/p7zip/archive/v${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="LGPL-2.1 rar? ( unRAR )" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos" +IUSE="abi_x86_x32 natspec +pch rar test" + +REQUIRED_USE="test? ( rar )" # bug 907221 +RESTRICT="!test? ( test )" + +RDEPEND="natspec? ( dev-libs/libnatspec )" +DEPEND="${RDEPEND}" +BDEPEND=" + abi_x86_x32? ( >=dev-lang/yasm-1.2.0-r1 ) + amd64? ( dev-lang/yasm ) + x86? ( dev-lang/nasm )" + +PATCHES=( "${FILESDIR}/p7zip-17.05-unit64.patch" ) + +src_prepare() { + default + + if use natspec; then + eapply "${FILESDIR}"/${P}-natspec.patch + sed -i '/^LOCAL_LIBS/s/$/ -lnatspec/' makefile.* || die + else + eapply "${FILESDIR}/${P}-localization.patch" + fi + + if ! use pch; then + sed "s:PRE_COMPILED_HEADER=StdAfx.h.gch:PRE_COMPILED_HEADER=:g" -i makefile.* || die + fi + + sed \ + -e 's|-m32 ||g' \ + -e 's|-m64 ||g' \ + -e 's|-pipe||g' \ + -e "/[ALL|OPT]FLAGS/s|-s||;/OPTIMIZE/s|-s||" \ + -e "/CFLAGS=/s|=|+=|" \ + -e "/CXXFLAGS=/s|=|+=|" \ + -i makefile* || die + + # remove non-free RAR codec + if ! use rar; then + sed \ + -e '/Rar/d' \ + -e '/RAR/d' \ + -i makefile* CPP/7zip/Bundles/Format7zFree/makefile || die + rm -r CPP/7zip/Compress/Rar || die + fi + + if use abi_x86_x32; then + sed -i -e "/^ASM=/s:amd64:x32:" makefile* || die + cp makefile.linux_amd64_asm makefile.machine || die + elif use amd64; then + cp makefile.linux_amd64_asm makefile.machine || die + elif use x86; then + cp makefile.linux_x86_asm_gcc_4.X makefile.machine || die + elif [[ ${CHOST} == *-darwin* ]] ; then + # Mac OS X needs this special makefile, because it has a non-GNU + # linker, it doesn't matter so much for bitwidth, for it doesn't + # do anything with it + cp makefile.macosx_llvm_64bits makefile.machine || die + # bundles have extension .bundle but don't die because USE=-rar + # removes the Rar directory + sed -i -e '/strcpy(name/s/\.so/.bundle/' \ + CPP/Windows/DLL.cpp || die + sed -i -e '/^PROG=/s/\.so/.bundle/' \ + CPP/7zip/Bundles/Format7zFree/makefile.list \ + $(use rar && echo CPP/7zip/Compress/Rar/makefile.list) || die + fi +} + +src_compile() { + emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" all3 +} + +src_test() { + emake test test_7z test_7zr +} + +src_install() { + # these wrappers cannot be symlinks, p7zip should be called with full path + make_wrapper 7zr /usr/$(get_libdir)/p7zip/7zr + make_wrapper 7za /usr/$(get_libdir)/p7zip/7za + make_wrapper 7z /usr/$(get_libdir)/p7zip/7z + + dobin contrib/gzip-like_CLI_wrapper_for_7z/p7zip + doman contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 + + exeinto /usr/$(get_libdir)/p7zip + doexe bin/7z bin/7za bin/7zr bin/7zCon.sfx + doexe bin/*$(get_modname) + if use rar; then + exeinto /usr/$(get_libdir)/p7zip/Codecs + doexe bin/Codecs/*$(get_modname) + fi + + doman man1/7z.1 man1/7za.1 man1/7zr.1 + + dodoc ChangeLog README TODO + dodoc DOC/*.txt + docinto html + dodoc -r DOC/MANUAL/. +}