From patchwork Fri Apr 28 11:48:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos O'Donell X-Patchwork-Id: 68461 X-Patchwork-Delegate: siddhesh@gotplt.org Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E874B3857736 for ; Fri, 28 Apr 2023 11:48:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E874B3857736 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682682523; bh=+vAL5TtP6ph0S0lNGNx2s1hzUZIU6ZbXlqr1tipfATg=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=J65kQVhvCCryd7oqOZmKsO8CtcODsl3+CZyCszc6W3OdqYgUKlevaJVr0ydOBijAr FwvQodrHRneakpf1aJkuBm/wL4Ry9zc8PWLKTSvgYN3tT4fz0VyzIerjI2Fhg+qApo VLOcj5VJdrakaXc6e2zLuh++ZbLqtMf1rUmTtdBs= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 0F8AD3858CDA for ; Fri, 28 Apr 2023 11:48:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0F8AD3858CDA Received: from mail-yb1-f197.google.com (mail-yb1-f197.google.com [209.85.219.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-659-fVlOESKePqWeiGseK4I_oA-1; Fri, 28 Apr 2023 07:48:17 -0400 X-MC-Unique: fVlOESKePqWeiGseK4I_oA-1 Received: by mail-yb1-f197.google.com with SMTP id 3f1490d57ef6-b99ef860a40so8520730276.3 for ; Fri, 28 Apr 2023 04:48:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682682496; x=1685274496; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+vAL5TtP6ph0S0lNGNx2s1hzUZIU6ZbXlqr1tipfATg=; b=Pxcs/0tIyC2pZUN+3QowNogs1tswUtEn00/1Ky0jPA6i1HxYQ3nlLVpee04nuV/v2d PFdAuj816Q6glosgZTqi39XSnOYKqXNMjR4WB/e7NlDqbu37Wax/6Tui4/y/UzQIfvpi O2pxNTokWDx2NHnNsBXF7HpG6U6QlbzOpACOMOx86AtuwyfcfPmFGwJtZ7jx1e1hw2kQ JQYTE3GuWFHRy6OJ4KgyTW07aIwJqVLyl2beL+B+i8q8Z8krETNPrP6x966V0ts+lo0Y Yw/6Ys5spErU7D8KSJJfmOoqxLX/VJhj8KsSSMGYpw/O+UG5yK27vZnG2MuKjk0x/g6h CAyQ== X-Gm-Message-State: AC+VfDyungMpZf75/WbVeXmwghmPbsqbqQ8lcDCDfErVe/8m+UBbSGBk v1XLfNgyZVVpNOxixRk4VRXAxQhT1dfME9+JUt0yO2ecs7VU01aMQAxb9GKNW5qd2XLHgpyK7Yq M+Vp3LQP+nb+nodg1rHHLcHMdbsn4Gsrl23PHBpfUgL34kVjaQXSWXgmaB2c+n76ViMmRXd6JJW 6keA== X-Received: by 2002:a25:5015:0:b0:b9a:7427:4503 with SMTP id e21-20020a255015000000b00b9a74274503mr3765303ybb.31.1682682496425; Fri, 28 Apr 2023 04:48:16 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ616jGqw+91uX9mpioDLt3B6VL31uY9KHsEr9JcyRsuTNV3Tgr/fOJk0K4dHKGqSM81l5OiWQ== X-Received: by 2002:a25:5015:0:b0:b9a:7427:4503 with SMTP id e21-20020a255015000000b00b9a74274503mr3765287ybb.31.1682682496000; Fri, 28 Apr 2023 04:48:16 -0700 (PDT) Received: from athas.redhat.com ([198.48.244.52]) by smtp.gmail.com with ESMTPSA id i3-20020a258b03000000b00b8c08669033sm5064956ybl.40.2023.04.28.04.48.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 04:48:15 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Carlos O'Donell Subject: [PATCH 1/2] nptl: Re-flow and sort variables in Makefile. Date: Fri, 28 Apr 2023 07:48:10 -0400 Message-Id: <20230428114811.4129539-2-carlos@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230428114811.4129539-1-carlos@redhat.com> References: <20230428114811.4129539-1-carlos@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-type: text/plain; charset=UTF-8 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Carlos O'Donell via Libc-alpha From: Carlos O'Donell Reply-To: Carlos O'Donell Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- sysdeps/pthread/Makefile | 433 +++++++++++++----- .../{tst-mutex7robust.c => tst-robust11.c} | 0 2 files changed, 320 insertions(+), 113 deletions(-) rename sysdeps/pthread/{tst-mutex7robust.c => tst-robust11.c} (100%) Reviewed-by: Siddhesh Poyarekar diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile index c2f5588bd9..222f5b5142 100644 --- a/sysdeps/pthread/Makefile +++ b/sysdeps/pthread/Makefile @@ -21,9 +21,17 @@ $(objpfx)tst-timer: $(librt) endif ifneq (,$(filter $(subdir),htl nptl)) -headers += threads.h - -routines += thrd_current thrd_equal thrd_sleep thrd_yield pthread_atfork +headers += \ + threads.h \ + # headers + +routines += \ + pthread_atfork \ + thrd_current \ + thrd_equal \ + thrd_sleep \ + thrd_yield \ + # routines $(libpthread-routines-var) += \ call_once \ @@ -48,86 +56,231 @@ $(libpthread-routines-var) += \ tss_delete \ tss_get \ tss_set \ + # $(libpthread-routines-var) -tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \ - tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \ - tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock \ - \ - tst-abstime \ - tst-pt-align tst-pt-align3 \ - tst-attr1 \ - tst-backtrace1 \ - tst-bad-schedattr \ - tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 \ - tst-basic1 tst-basic2 tst-basic3 tst-basic4 tst-basic5 tst-basic6 \ - tst-basic7 \ - tst-cancel-self tst-cancel-self-cancelstate \ - tst-cancel-self-canceltype tst-cancel-self-testcancel \ - tst-cancel1 tst-cancel2 tst-cancel3 \ - tst-cancel4 tst-cancel5 \ - tst-cancel6 tst-cancel8 tst-cancel9 tst-cancel10 tst-cancel11 \ - tst-cancel12 tst-cancel13 tst-cancel14 tst-cancel15 tst-cancel16 \ - tst-cancel18 tst-cancel19 tst-cancel20 tst-cancel21 \ - tst-cancel22 tst-cancel23 tst-cancel26 tst-cancel27 tst-cancel28 \ - tst-cancel29 \ - tst-cleanup0 tst-cleanup1 tst-cleanup2 tst-cleanup3 \ - tst-clock1 \ - tst-cond-except \ - tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \ - tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \ - tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \ - tst-cond20 tst-cond21 tst-cond23 tst-cond24 tst-cond25 tst-cond27 \ - tst-create-detached \ - tst-detach1 \ - tst-eintr2 tst-eintr3 tst-eintr4 tst-eintr5 \ - tst-exec1 tst-exec2 tst-exec3 \ - tst-exit1 tst-exit2 tst-exit3 \ - tst-flock1 tst-flock2 \ - tst-fork1 tst-fork2 tst-fork3 tst-fork4 \ - tst-atfork1 \ - tst-getpid3 \ - tst-join1 tst-join2 tst-join3 tst-join4 tst-join5 tst-join6 tst-join7 \ - tst-join8 tst-join9 tst-join10 tst-join11 tst-join12 tst-join13 \ - tst-join14 tst-join15 \ - tst-key1 tst-key2 tst-key3 tst-key4 \ - tst-kill1 tst-kill2 tst-kill3 tst-kill5 tst-kill6 \ - tst-locale1 tst-locale2 \ - tst-memstream \ - tst-mutex-errorcheck tst-mutex1 tst-mutex2 tst-mutex3 tst-mutex4 \ - tst-mutex5 tst-mutex6 tst-mutex7 tst-mutex7robust tst-mutex9 \ - tst-mutex10 tst-mutex11 tst-pthread-mutexattr \ - tst-once1 tst-once2 tst-once3 tst-once4 \ - tst-pt-popen1 \ - tst-raise1 \ - tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \ - tst-robust6 tst-robust7 tst-robust9 tst-robust10 \ - tst-rwlock1 tst-rwlock4 tst-rwlock5 tst-rwlock12 \ - tst-rwlock13 tst-rwlock14 tst-rwlock16 \ - tst-rwlock-tryrdlock-stall tst-rwlock-trywrlock-stall \ - tst-sem1 tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 \ - tst-sem8 tst-sem9 tst-sem10 tst-sem14 tst-sem15 tst-sem16 \ - tst-setuid3 \ - tst-signal1 tst-signal2 \ - tst-signal4 tst-signal5 tst-signal6 tst-signal8 \ - tst-spin1 tst-spin2 tst-spin3 tst-spin4 \ - tst-stack1 \ - tst-stdio1 tst-stdio2 \ - tst-pt-sysconf \ - tst-pt-tls1 tst-pt-tls2 \ - tst-tsd1 tst-tsd2 tst-tsd5 tst-tsd6 \ - tst-umask1 \ - tst-unload \ - tst-unwind-thread \ - tst-pt-vfork1 tst-pt-vfork2 tst-vfork1x tst-vfork2x \ - tst-pthread-exit-signal \ - tst-pthread-setuid-loop \ - tst-pthread_cancel-exited \ - tst-pthread_cancel-select-loop \ - tst-pthread-raise-blocked-self \ - tst-pthread_kill-exited \ - tst-pthread_kill-exiting \ - tst-cancel30 \ - # tests +tests += \ + tst-abstime \ + tst-atfork1 \ + tst-attr1 \ + tst-backtrace1 \ + tst-bad-schedattr \ + tst-barrier1 \ + tst-barrier2 \ + tst-barrier3 \ + tst-barrier4 \ + tst-basic1 \ + tst-basic2 \ + tst-basic3 \ + tst-basic4 \ + tst-basic5 \ + tst-basic6 \ + tst-basic7 \ + tst-call-once \ + tst-cancel-self \ + tst-cancel-self-cancelstate \ + tst-cancel-self-canceltype \ + tst-cancel-self-testcancel \ + tst-cancel1 \ + tst-cancel2 \ + tst-cancel3 \ + tst-cancel4 \ + tst-cancel5 \ + tst-cancel6 \ + tst-cancel8 \ + tst-cancel9 \ + tst-cancel10 \ + tst-cancel11 \ + tst-cancel12 \ + tst-cancel13 \ + tst-cancel14 \ + tst-cancel15 \ + tst-cancel16 \ + tst-cancel18 \ + tst-cancel19 \ + tst-cancel20 \ + tst-cancel21 \ + tst-cancel22 \ + tst-cancel23 \ + tst-cancel26 \ + tst-cancel27 \ + tst-cancel28 \ + tst-cancel29 \ + tst-cancel30 \ + tst-cleanup0 \ + tst-cleanup1 \ + tst-cleanup2 \ + tst-cleanup3 \ + tst-clock1 \ + tst-cnd-basic \ + tst-cnd-broadcast \ + tst-cnd-timedwait \ + tst-cond-except \ + tst-cond1 \ + tst-cond2 \ + tst-cond3 \ + tst-cond4 \ + tst-cond5 \ + tst-cond6 \ + tst-cond7 \ + tst-cond8 \ + tst-cond9 \ + tst-cond10 \ + tst-cond11 \ + tst-cond12 \ + tst-cond13 \ + tst-cond14 \ + tst-cond15 \ + tst-cond16 \ + tst-cond17 \ + tst-cond18 \ + tst-cond19 \ + tst-cond20 \ + tst-cond21 \ + tst-cond23 \ + tst-cond24 \ + tst-cond25 \ + tst-cond27 \ + tst-create-detached \ + tst-detach1 \ + tst-eintr2 \ + tst-eintr3 \ + tst-eintr4 \ + tst-eintr5 \ + tst-exec1 \ + tst-exec2 \ + tst-exec3 \ + tst-exit1 \ + tst-exit2 \ + tst-exit3 \ + tst-flock1 \ + tst-flock2 \ + tst-fork1 \ + tst-fork2 \ + tst-fork3 \ + tst-fork4 \ + tst-getpid3 \ + tst-join1 \ + tst-join2 \ + tst-join3 \ + tst-join4 \ + tst-join5 \ + tst-join6 \ + tst-join7 \ + tst-join8 \ + tst-join9 \ + tst-join10 \ + tst-join11 \ + tst-join12 \ + tst-join13 \ + tst-join14 \ + tst-join15 \ + tst-key1 \ + tst-key2 \ + tst-key3 \ + tst-key4 \ + tst-kill1 \ + tst-kill2 \ + tst-kill3 \ + tst-kill5 \ + tst-kill6 \ + tst-locale1 \ + tst-locale2 \ + tst-memstream \ + tst-mtx-basic \ + tst-mtx-recursive \ + tst-mtx-timedlock \ + tst-mtx-trylock \ + tst-mutex-errorcheck \ + tst-mutex1 \ + tst-mutex2 \ + tst-mutex3 \ + tst-mutex4 \ + tst-mutex5 \ + tst-mutex6 \ + tst-mutex7 \ + tst-mutex9 \ + tst-mutex10 \ + tst-mutex11 \ + tst-once1 \ + tst-once2 \ + tst-once3 \ + tst-once4 \ + tst-pt-align \ + tst-pt-align3 \ + tst-pt-popen1 \ + tst-pt-sysconf \ + tst-pt-tls1 \ + tst-pt-tls2 \ + tst-pt-vfork1 \ + tst-pt-vfork2 \ + tst-pthread-exit-signal \ + tst-pthread-mutexattr \ + tst-pthread-raise-blocked-self \ + tst-pthread-setuid-loop \ + tst-pthread_cancel-exited \ + tst-pthread_cancel-select-loop \ + tst-pthread_kill-exited \ + tst-pthread_kill-exiting \ + tst-raise1 \ + tst-robust1 \ + tst-robust2 \ + tst-robust3 \ + tst-robust4 \ + tst-robust5 \ + tst-robust6 \ + tst-robust7 \ + tst-robust9 \ + tst-robust10 \ + tst-robust11 \ + tst-rwlock-tryrdlock-stall \ + tst-rwlock-trywrlock-stall \ + tst-rwlock1 \ + tst-rwlock4 \ + tst-rwlock5 \ + tst-rwlock12 \ + tst-rwlock13 \ + tst-rwlock14 \ + tst-rwlock16 \ + tst-sem1 \ + tst-sem2 \ + tst-sem3 \ + tst-sem4 \ + tst-sem5 \ + tst-sem6 \ + tst-sem7 \ + tst-sem8 \ + tst-sem9 \ + tst-sem10 \ + tst-sem14 \ + tst-sem15 \ + tst-sem16 \ + tst-setuid3 \ + tst-signal1 \ + tst-signal2 \ + tst-signal4 \ + tst-signal5 \ + tst-signal6 \ + tst-signal8 \ + tst-spin1 \ + tst-spin2 \ + tst-spin3 \ + tst-spin4 \ + tst-stack1 \ + tst-stdio1 \ + tst-stdio2 \ + tst-thrd-detach \ + tst-thrd-sleep \ + tst-tsd1 \ + tst-tsd2 \ + tst-tsd5 \ + tst-tsd6 \ + tst-tss-basic \ + tst-umask1 \ + tst-unload \ + tst-unwind-thread \ + tst-vfork1x \ + tst-vfork2x \ + # tests tests-time64 += \ tst-abstime-time64 \ @@ -138,47 +291,70 @@ tests-time64 += \ tst-rwlock14-time64 \ tst-sem5-time64 \ tst-thrd-sleep-time64 \ + # tests-time64 static-only-routines = pthread_atfork # Files which must not be linked with libpthread. -tests-nolibpthread += tst-unload +tests-nolibpthread += \ + tst-unload \ + # tests-nolibpthread # GCC-4.9 compiles 'sprintf(NULL, ...)' into UD2 on x86_64 without -fno-builtin CFLAGS-tst-cleanup2.c += -fno-builtin CFLAGS-tst-cleanupx2.c += -fno-builtin -tests += tst-cancelx2 tst-cancelx3 tst-cancelx6 tst-cancelx8 tst-cancelx9 \ - tst-cancelx4 tst-cancelx5 \ - tst-cancelx10 tst-cancelx11 tst-cancelx12 tst-cancelx13 tst-cancelx14 \ - tst-cancelx15 tst-cancelx16 tst-cancelx18 tst-cancelx20 tst-cancelx21 \ - tst-cleanupx0 tst-cleanupx1 tst-cleanupx2 tst-cleanupx3 +tests += \ + tst-cancelx2 \ + tst-cancelx3 \ + tst-cancelx4 \ + tst-cancelx5 \ + tst-cancelx6 \ + tst-cancelx8 \ + tst-cancelx9 \ + tst-cancelx10 \ + tst-cancelx11 \ + tst-cancelx12 \ + tst-cancelx13 \ + tst-cancelx14 \ + tst-cancelx15 \ + tst-cancelx16 \ + tst-cancelx18 \ + tst-cancelx20 \ + tst-cancelx21 \ + tst-cleanupx0 \ + tst-cleanupx1 \ + tst-cleanupx2 \ + tst-cleanupx3 \ + # tests ifeq ($(build-shared),yes) tests += \ - tst-atfork2 \ - tst-pt-tls4 \ tst-_res1 \ - tst-fini1 \ - tst-create1 \ + tst-atfork2 \ tst-atfork3 \ tst-atfork4 \ -# tests + tst-create1 \ + tst-fini1 \ + tst-pt-tls4 \ + # tests -tests-nolibpthread += tst-fini1 +tests-nolibpthread += \ + tst-fini1 \ + # tests-nolibpthread endif modules-names += \ - tst-atfork2mod \ - tst-tls4moda \ - tst-tls4modb \ tst-_res1mod1 \ tst-_res1mod2 \ - tst-fini1mod \ - tst-create1mod \ + tst-atfork2mod \ tst-atfork3mod \ tst-atfork4mod \ -# module-names + tst-create1mod \ + tst-fini1mod \ + tst-tls4moda \ + tst-tls4modb \ + # modules-names test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names))) @@ -192,17 +368,30 @@ ifeq ($(build-shared),yes) tests: $(test-modules) endif +tests-static += \ + tst-cancel21-static \ + tst-locale1 \ + tst-locale2 \ + # tests-static -tests-static += tst-locale1 tst-locale2 tst-cancel21-static - -tests += tst-cancel21-static tst-cond11-static +tests += \ + tst-cancel21-static \ + tst-cond11-static \ + # tests # These tests are linked with libc before libpthread -tests-reverse += tst-cancel5 tst-cancel23 tst-vfork1x tst-vfork2x +tests-reverse += \ + tst-cancel5 \ + tst-cancel23 \ + tst-vfork1x \ + tst-vfork2x \ + # tests-reverse ifeq ($(run-built-tests),yes) ifeq ($(build-shared),yes) -tests-special += $(objpfx)tst-cleanup0-cmp.out +tests-special += \ + $(objpfx)tst-cleanup0-cmp.out \ + # tests-special endif endif @@ -286,20 +475,38 @@ $(objpfx)tst-_res1: $(objpfx)tst-_res1mod1.so $(objpfx)tst-_res1mod2.so \ $(objpfx)tst-pt-tls4: $(shared-thread-library) $(objpfx)tst-pt-tls4.out: $(objpfx)tst-tls4moda.so $(objpfx)tst-tls4modb.so -generated += tst-atfork2.mtrace +generated += \ + tst-atfork2.mtrace \ + # generated -generated += $(objpfx)tst-atfork2.mtrace \ - $(addsuffix .so,$(strip $(modules-names))) +generated += \ + $(objpfx)tst-atfork2.mtrace \ + $(addsuffix .so,$(strip $(modules-names))) \ + # generated -tests-internal += tst-cancel25 tst-robust8 +tests-internal += \ + tst-cancel25 \ + tst-robust8 \ + # tests-internal -tests += tst-oncex3 tst-oncex4 tst-oncey3 tst-oncey4 +tests += \ + tst-oncex3 \ + tst-oncex4 \ + tst-oncey3 \ + tst-oncey4 \ + # tests -modules-names += tst-join7mod +modules-names += \ + tst-join7mod \ + # modules-names ifeq ($(build-shared),yes) -tests-static += tst-cond8-static -tests += tst-cond8-static +tests-static += \ + tst-cond8-static \ + # tests-static +tests += \ + tst-cond8-static \ + # tests endif CFLAGS-tst-oncex3.c += -fexceptions diff --git a/sysdeps/pthread/tst-mutex7robust.c b/sysdeps/pthread/tst-robust11.c similarity index 100% rename from sysdeps/pthread/tst-mutex7robust.c rename to sysdeps/pthread/tst-robust11.c From patchwork Fri Apr 28 11:48:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos O'Donell X-Patchwork-Id: 68462 X-Patchwork-Delegate: siddhesh@gotplt.org Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EA8923857716 for ; Fri, 28 Apr 2023 11:48:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EA8923857716 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682682525; bh=G5fZkrQ7TY8ivp6SugPpvhgUhGVAIQMq3cxB7u4BkJY=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=fymK3Tb8hEaNRnRaxLJjxSPOF/yxuibrWtbrM0i7JLBdeCE2jszCWxpMJ9MYeP3EE 4bHRzOLsLCIoQ4kV2nDpqw7/4l+8XxDkLppZIQ32pWiSjxOayGCdQ2GhNA2b5AACRC gMvqvk7OWVz4vzRKBMDKx9SRCpG/cV0mzfSdxDuw= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 0CD203858C31 for ; Fri, 28 Apr 2023 11:48:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0CD203858C31 Received: from mail-yb1-f200.google.com (mail-yb1-f200.google.com [209.85.219.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-114-IQcCImqZM92tNDjzRos4xg-1; Fri, 28 Apr 2023 07:48:19 -0400 X-MC-Unique: IQcCImqZM92tNDjzRos4xg-1 Received: by mail-yb1-f200.google.com with SMTP id 3f1490d57ef6-b9a7df507c5so3373596276.1 for ; Fri, 28 Apr 2023 04:48:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682682498; x=1685274498; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=G5fZkrQ7TY8ivp6SugPpvhgUhGVAIQMq3cxB7u4BkJY=; b=ijsi3WGBna0PQYskcbSeNNfE52UvfhF/BJz/n8hReJTDc5KAqWuhgO0qStrgKj323V FIRESjXxQ/uOC4Zdud5BVNPpMpsEQI8iy363VyhtO11o+wYHlcd14Si+G2e1IfT3mpUh OYMweWXj0rsVg8cD8NiIi7+Iq5m1AqCv0NbJFY3KE3aocI2OksngzuTlzgwljRe1wiP+ VOX/nsJuW2W+8bNfyVYrZs4OqIUJM7OrzzWIfD1UkjEk85Wtw9vH+ypSkXJNmgZhmyv6 pb4PPiAFx3iC+q3Sm5HjsRpG7aH0pDeKUTK/LBNGGXGB8LWstTyhBTIAYar8X76MXZgJ Gz5w== X-Gm-Message-State: AC+VfDz8q9de8gAuMzXCwntgpbZT3zXvNtBjfn9sxcrhn9ndPqwt9Cr5 xM4C91otKVcTWFIgLYOtRpXf5Mgm32RndXT1Y1vja3lpUhoT/15fNrerwlDK2HbAGhnxytBAVxb LODlEPkzhsBMjZwNgpPp7bWVTzKbZRcpkufkoQ66tEKrGeAyGtFtQZsee9Wgv/L0NZPLjBBP+EB l1Pw== X-Received: by 2002:a05:6902:102f:b0:b92:41a6:5637 with SMTP id x15-20020a056902102f00b00b9241a65637mr4145252ybt.14.1682682498296; Fri, 28 Apr 2023 04:48:18 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7DaVCU7G+ZxXbxhYEICk2+svLP2lQ9nx7cceQEwk2Tj0WydDNJ4nhvXesyZA4npGlLn/KGog== X-Received: by 2002:a05:6902:102f:b0:b92:41a6:5637 with SMTP id x15-20020a056902102f00b00b9241a65637mr4145238ybt.14.1682682497827; Fri, 28 Apr 2023 04:48:17 -0700 (PDT) Received: from athas.redhat.com ([198.48.244.52]) by smtp.gmail.com with ESMTPSA id i3-20020a258b03000000b00b8c08669033sm5064956ybl.40.2023.04.28.04.48.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 04:48:17 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Carlos O'Donell Subject: [PATCH 2/2] scripts: Add sort-makefile-lines.py to sort Makefile variables. Date: Fri, 28 Apr 2023 07:48:11 -0400 Message-Id: <20230428114811.4129539-3-carlos@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230428114811.4129539-1-carlos@redhat.com> References: <20230428114811.4129539-1-carlos@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-type: text/plain; charset=UTF-8 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Carlos O'Donell via Libc-alpha From: Carlos O'Donell Reply-To: Carlos O'Donell Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" The scripts/sort-makefile-lines.py script sorts Makefile variables according to project expected order. The script is used like this: $ scripts/sort-makefile-lines.py -i elf/Makefile -o elf/Makefile.tmp $ mv elf/Makefile.tmp elf/Makefile --- scripts/sort-makefile-lines.py | 217 +++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100755 scripts/sort-makefile-lines.py diff --git a/scripts/sort-makefile-lines.py b/scripts/sort-makefile-lines.py new file mode 100755 index 0000000000..06c0b3b3a2 --- /dev/null +++ b/scripts/sort-makefile-lines.py @@ -0,0 +1,217 @@ +#!/usr/bin/python3 +# Sort Makefile lines as expected by project policy. +# Copyright (C) 2022-2023 Free Software Foundation, Inc. +# Copyright The GNU Toolchain Authors. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# . + +# The project consensus is to split Makefile variable assignment +# across multiple lines with one value per line. The values are +# then sorted as described below, and terminated with a special +# list termination marker. This splitting makes it much easier +# to add new tests to the list since they become just a single +# line insertion. It also makes backports and merges easier +# since the new test may not conflict due to the ordering. +# +# Consensus discussion: +# https://public-inbox.org/libc-alpha/f6406204-84f5-adb1-d00e-979ebeebbbde@redhat.com/ +# +# To support cleaning up Makefiles we created this program to +# help sort existing lists converted to the new format. +# +# The program takes as input the Makefile to sort correctly, +# and the output file to write the correctly sorted output. +# +# Sorting is only carried out between two special markers: +# (a) Marker start is ' += \' +# (b) Marker end is ' # ' +# With everthing between (a) and (b) being sorted. +# +# You can use it like this: +# $ scripts/sort-makefile-lines.py -i elf/Makefile -o elf/Makefile.tmp +# $ mv elf/Makefile.tmp elf/Makefile +# +# The Makefile lines in the project are sorted using the +# following rules: +# - First all lines are sorted as-if `LC_COLLATE=C sort` +# - Then all entries by group are sorted against the last digits +# of the test. +# +# For example: +# ~~~ +# tests += \ +# test-a \ +# test-b \ +# test-b1 \ +# test-b2 \ +# test-b10 \ +# test-b20 \ +# test-b100 \ +# # tests +# ~~~ +# This example shows tests sorted alphabetically, followed +# by a numeric suffix sort in increasing numeric order. +# +# Required cleanups: +# - Tests that end in "a" or "b" variants must be renamed to +# end in just the numerical value. For example 'tst-mutex7robust' +# should be renamed to 'tst-mutex12' (the highest numbered test) +# or 'tst-robust11' (the highest numbered test). +# - Modules that end in "mod" or "mod1" should be renamed. For +# example 'tst-atfork2mod' should be renamed to 'tst-mod-atfork2' +# (test module for atfork2). If there are more than one module +# then they should be named with a suffix that uses [0-9] first +# then [A-Z] next for a total of 36 possible modules per test. +# No manually listed test currently uses more than that (though +# automatically generated tests may; they don't need sorting). +# - Avoid including another test and instead refactor into common +# code with all tests including hte common code, then give the +# tests unique names. +# +# If you have a Makefile that needs converting, then you can +# quickly split the values into one-per-line, ensure the start +# and end markers are in place, and then run the script to +# sort the values. + +import argparse +import sys +import locale +import re +import functools + +def numeric_key(line): + # Turn a line into a numeric sort value by fetching + # the ending number and using that as a key. + var = re.search(r'([0-9]+) \\$', line) + if var == None: + print ("Error: Test line is currently: \"", end='') + print (line, end='') + print ("\"") + print ( + ''' +Test name does not match expected pattern. +Rename to match pattern e.g. tst-name[0-9]+. + ''' + ) + raise Exception ("Invalid test name.") + # Return the numeric value as the key or throws because + # var is None. + return int(var.group(1)) + +def sort_lines(lines): + + # Use the C locale for language independent collation. + locale.setlocale (locale.LC_ALL, "C") + + # Sort with strcoll initially. The tests ending in numeric + # names will not sort correctly, but we will adjust that next. + lines = sorted(lines, key=functools.cmp_to_key(locale.strcoll)) + + # We could use a trie here, but since the problem is restricted + # to just numeric suffix we sort by group with a unique key + # function. + + # Build a list of all start markers (tuple includes prefix) + prefixes = [] + groups = [] + for i in range(len(lines)): + # Look for things like " tst-foo1 \" to start the numbered list. + var = re.search(r'([0-9]+) \\$', lines[i]) + if var: + prefix = lines[i][0:var.span()[0]] + if prefix in prefixes: + continue + prefixes.append(prefix) + groups.append((prefix, i)) + + # For each prefix find the range it covers that needs numeric sorting. + numgroups = [] + for group in groups: + for j in range(group[1] + 1,len(lines)): + if not lines[j].startswith(group[0]): + # If it doesn't start with the prefix, then we're on to + # to the next group so mark the last entry as the end + # of the group. + numgroups.append((group[0], group[1], j - 1)) + break + + # We now have a list of groups to sort. + for ng in numgroups: + # Note slices exclude nth element, so we must add one to right side. + lines[ng[1]:ng[2]+1] = sorted(lines[ng[1]:ng[2]+1], key=numeric_key) + + # Return a sorted list with numeric tests sorted by number. + return lines + +def sort_makefile_lines(infile, outfile): + + # Read the whole Makefile. + mfile = open(infile) + lines = mfile.readlines() + mfile.close() + + # We will output the Makefile here. Open it early to check + # for any errors. + ofile = open(outfile, "w") + + # Build a list of all start markers (tuple includes name). + startmarks = [] + for i in range(len(lines)): + # Look for things like "var += \" to start the sorted list. + var = re.search(r'^([a-zA-Z0-9]*) \+\= \\$', lines[i]) + if var: + # Remember the index and the name. + startmarks.append((i, var.group(1))) + + # For each start marker try to find a matching end mark + # and build a block that needs sorting. The end marker + # must have the matching comment name for it to be valid. + rangemarks = [] + for sm in startmarks: + # Look for things like " # var" to end the sorted list. + reg = r'^ # ' + sm[1] + r'$' + for j in range(sm[0] + 1, len(lines)): + if re.search(reg, lines[j]): + # Rembember the block to sort (inclusive). + rangemarks.append((sm[0] + 1, j - 1)) + break + + # We now have a list of all ranges that need sorting. + # Sort those ranges. + for r in rangemarks: + lines[r[0]:r[1]] = sort_lines(lines[r[0]:r[1]]) + + # Output the whole list with sorted lines. + for line in lines: + ofile.write(line) + + ofile.close() + +def get_parser(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('-i', dest='infile', + help='Input Makefile to read lines from') + parser.add_argument('-o', dest='outfile', + help='Output Makefile to write sorted lines to') + return parser + +def main(argv): + parser = get_parser() + opts = parser.parse_args(argv) + sort_makefile_lines (opts.infile, opts.outfile) + +if __name__ == '__main__': + main(sys.argv[1:])