From patchwork Wed Feb 25 21:17:30 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Erdmann?= X-Patchwork-Id: 443670 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from silver.osuosl.org (silver.osuosl.org [140.211.166.136]) by ozlabs.org (Postfix) with ESMTP id 83609140083 for ; Thu, 26 Feb 2015 08:26:28 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=mailerd.de header.i=@mailerd.de header.b=LTIMnaWn; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id C2CCD334CF; Wed, 25 Feb 2015 21:26:27 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yOmP4GYRezHv; Wed, 25 Feb 2015 21:26:26 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by silver.osuosl.org (Postfix) with ESMTP id F237032C1E; Wed, 25 Feb 2015 21:26:25 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from hemlock.osuosl.org (hemlock.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id 4131F1C2214 for ; Wed, 25 Feb 2015 21:26:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 3E18A93919 for ; Wed, 25 Feb 2015 21:26:25 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0cEHUZGm8EKp for ; Wed, 25 Feb 2015 21:26:24 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wg0-f48.google.com (mail-wg0-f48.google.com [74.125.82.48]) by hemlock.osuosl.org (Postfix) with ESMTPS id 0CCE593393 for ; Wed, 25 Feb 2015 21:26:24 +0000 (UTC) Received: by wghk14 with SMTP id k14so6358872wgh.3 for ; Wed, 25 Feb 2015 13:26:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailerd.de; s=mails; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=ZtnBAgGowzeC/lA4QcjK3ju38aF4gsJABUqBVEV8YTU=; b=LTIMnaWnGmKkdmMuyXrz9iKmO81lPvt3YCY9WdP/LNl29bIwxEd/aUwHP6GBKd4rKm yzftqR/OBy0QRS8uFHA3nmt9d3KU2nlBUqN+krr3JUaQbj5NEPYyEaT+mgMWfI/zGboi i27adDJTFTNUgtyk4AD+XESPayOggHl+YByMg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-type :content-transfer-encoding; bh=ZtnBAgGowzeC/lA4QcjK3ju38aF4gsJABUqBVEV8YTU=; b=XrEoEsJw3oCZGVn7b7ntCiZ/QtY2ENwSlMmCCYPT5zFemw42lLNbumxG49yCbyT1NZ pKrACuljwXEU+qQmcbkLifFkK6Aiard5/Mh4Jd5vUvDGpwJFvyq7YrzonCBJmcFETIUf JLG/S/g/VdI/2ZRhLzLZUqABT6fBjiwrF1C1DffR1vvlc6DS6ZkK+myNFMKoztkgU5dk kEym//NHMzLuOSfyN1A1Ifn2KrP/0pXBoQkx6N31r7t9kX7C9OokM9s4mGwpGXDQuck/ Xwfxg4kUH4Tp3yvtm4Y6yccCOKt+dhklHy8RYGw1K7kLO+a+To9Xjo8xzM2SPIPQkL9/ 0cTQ== X-Gm-Message-State: ALoCoQmd5vufKbwhyOV7vWAwP7yw9M3SI/+LUZgCTH7LOhAE/YyiGMNfK6+vytAUhyOCb9PUOnnt X-Received: by 10.180.105.40 with SMTP id gj8mr44823840wib.67.1424899084532; Wed, 25 Feb 2015 13:18:04 -0800 (PST) Received: from localhost.localdomain (dslb-188-105-009-107.188.105.pools.vodafone-ip.de. [188.105.9.107]) by mx.google.com with ESMTPSA id fo9sm26800926wib.16.2015.02.25.13.18.03 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 25 Feb 2015 13:18:03 -0800 (PST) From: =?UTF-8?q?Andr=C3=A9=20Erdmann?= To: buildroot@buildroot.org Date: Wed, 25 Feb 2015 22:17:30 +0100 Message-Id: <1424899050-24932-14-git-send-email-dywi@mailerd.de> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1424899050-24932-1-git-send-email-dywi@mailerd.de> References: <1424899050-24932-1-git-send-email-dywi@mailerd.de> MIME-Version: 1.0 Cc: thomas.petazzoni@free-electrons.com Subject: [Buildroot] [PATCH 13/13] autobuild-run: set locale to en_US or C X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" some python scripts break if the locale is set to C, try en_US first Signed-off-by: André Erdmann --- scripts/autobuild-run | 59 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/scripts/autobuild-run b/scripts/autobuild-run index 7980879..b9440b6 100755 --- a/scripts/autobuild-run +++ b/scripts/autobuild-run @@ -95,6 +95,20 @@ else: decode_bytes = _identity decode_byte_list = _identity +if sys.hexversion >= 0x2700000: + _run_proc_check_output = subprocess.check_output +else: + # python 2.7 lacks subprocess.check_output(), need to define it here. + # It _has_ to raise CalledProcessError if the exitcode is not 0 + def _run_proc_check_output(args, **kwargs): + assert 'stdout' not in kwargs + proc = subprocess.Popen(args, stdout=subprocess.PIPE, **kwargs) + stdout_data, _ = proc.communicate() + ret = proc.poll() + if ret != os.EX_OK: + raise subprocess.CalledProcessError(ret, args) + return stdout_data + MAX_DURATION = 60 * 60 * 4 VERSION = 1 @@ -113,16 +127,23 @@ class SystemInfo: DEFAULT_NEEDED_PROGS = ["make", "git", "gcc", "timeout"] DEFAULT_OPTIONAL_PROGS = ["bzr", "java", "javac", "jar"] + # list of default locales (in lowercase, without "-", descending order) + # some python scripts break if the locale is set to C, try en_US first + TRY_LOCALES = ['en_us.utf8', 'en_us', 'c'] + # list of locale environment variables that should be (re-)set by set_locale() + LOCALE_KEYS = ['LANG'] + def __init__(self): self.needed_progs = list(self.__class__.DEFAULT_NEEDED_PROGS) self.optional_progs = list(self.__class__.DEFAULT_OPTIONAL_PROGS) self.progs = {} self.devnull = open(os.devnull, "w") + self.env = os.environ.copy() - def find_prog(self, name, flags=os.X_OK, env=os.environ): + def find_prog(self, name, flags=os.X_OK): if not name or name[0] == os.sep: raise ValueError(name) - prog_path = env.get("PATH", None) + prog_path = self.env.get("PATH", None) # for windows compatibility, we'd need to take PATHEXT into account if prog_path: @@ -171,10 +192,43 @@ class SystemInfo: return not missing_requirements + def set_locale(self): + try: + locales_str = _run_proc_check_output( + ["locale", "-a"], env=self.env, + stdin=self.devnull, stderr=self.devnull) + except subprocess.CalledProcessError: + return False + + locales = dict(( + (k.lower().replace("-", ""), k) + for k in decode_bytes(locales_str).split(None) + )) + + for loc_key in filter(lambda x: x in locales, self.TRY_LOCALES): + # cannot modify self.env while iterating over it, + # create intermediate list + env_old_locale_keys = [ + k for k in self.env.keys() if (k == 'LANG' or k[:3] == 'LC_') + ] + for k in env_old_locale_keys: + del self.env[k] + + # set new locale once + for vname in self.LOCALE_KEYS: + self.env[vname] = locales[loc_key] + return True + # -- end for + return None + + def sanitize_env(self): + self.set_locale() + def run_cmd(self, cmdv, **kwargs): kwargs.setdefault('stdin', self.devnull) kwargs.setdefault('stdout', self.devnull) kwargs.setdefault('stderr', self.devnull) + kwargs['env'] = self.env return subprocess.call(cmdv, **kwargs) def run_cmd_write_to(self, outstream, cmdv, **kwargs): @@ -659,6 +713,7 @@ Format of the configuration file: def main(): check_version() sysinfo = SystemInfo() + sysinfo.sanitize_env() (ninstances, njobs, http_login, http_password, submitter) = config_get() if http_login and http_password: