From patchwork Thu Apr 25 17:58:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 89009 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 DD345385840F for ; Thu, 25 Apr 2024 17:59:40 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.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 64DAF3858D38 for ; Thu, 25 Apr 2024 17:59:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 64DAF3858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 64DAF3858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714067955; cv=none; b=UIlcQLljzttHTovQkc3suxn8h0H/51/c8+Lz2KdkFf4V5TCEpe5c054rXODw7bZGnp0vBAb18jVqPfHaQIvc/6Cl74mWUSe8BjUhr2UeU5kYWuS3yn9ifh94oxySFI63tWi6a7J8HHd2m9YCZ2kMGPU5uzNkKB/tueut4UX8Rpw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714067955; c=relaxed/simple; bh=spttzBs5QsqeUTQmZ2KtFEXS1MM0ilh9roY8C3fmHXM=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=cQc9jYUqE8bmzSbRabG8JJMnWvJV3+eAYU+nNGPArTG4BlLpTVM5Ny5OCPZwudsYJCQ3TEfA8H2C5IiCw7VbrS9zNjbfl3hnSCEP/Wk+hB5AKvRPhKbUzNfZ6MCkK7KCJpHo4ugQDiiUcCtMPrWlZ6qGe7y0k3XddkRCVRiNsBc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714067953; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=spttzBs5QsqeUTQmZ2KtFEXS1MM0ilh9roY8C3fmHXM=; b=UKQItAoriwnxGAHmZIvzf4P/AtqglGdI/oPmQ7POB5tPq+JtzRi/ck6fhtgJkYUpfplQjq IiPRNdpIegxOmww66IPt4lctPa7Si6H17mowWBgDaKdRIkrtmRetanmbKz+JxeU+TBSYLW L/JOhVHyAtuZMo7+L3zj5OlIOJTEbk8= Received: from mail-yw1-f197.google.com (mail-yw1-f197.google.com [209.85.128.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-678-2I75v2bwMVS0eaH0cu0_6w-1; Thu, 25 Apr 2024 13:59:10 -0400 X-MC-Unique: 2I75v2bwMVS0eaH0cu0_6w-1 Received: by mail-yw1-f197.google.com with SMTP id 00721157ae682-61ab00d8a2eso21341247b3.3 for ; Thu, 25 Apr 2024 10:59:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714067949; x=1714672749; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=spttzBs5QsqeUTQmZ2KtFEXS1MM0ilh9roY8C3fmHXM=; b=Byy6yBz5jdUqM6oovNrC613v+ps3uv96EHzbWSqNI06EgOWA3GS1WCtqzZX8qytOJa y83XwYBaqWv2wztdYK3RcAEb2jq+0BrnyrMONCiLUQrH7VcMkch0sYBsVCem8In8Oeh4 V8MVW3sWbWgUX4W8BNyzeks4o7SzD4SuhMD/SCL0Y0qIvaCmVTkmFBxEB1w2gNA3XVtN uMPkffqsFi+5YRsqPlSAoGJMiHx/wGa+J5HR4Nz7NgyfOkhDmsKepYYqYzCdbIa1OUen k0y8BC8uMuh7AFsynaVMqK6QKO93KgeHq59ieqrha0jHsMkbwtSS3Br6WHuqVL+YfT9q hBEg== X-Forwarded-Encrypted: i=1; AJvYcCWo2T+iO6IGQtEmBvmkc43Tr/iH7agkuvx+Semw0oL+mIZjtdKaL/RK1p5oC0ud0PsTIPy1F8IfmUhHNt58QhIsNzV6IGBs7w== X-Gm-Message-State: AOJu0Yw56GYmGoP2QQP8BZvBd68Ps8M0DZO91KmBRSaW7xQUb/MCiuMn S/UN8DMU3Z+C/p3eIg5fKhdWhtfzbP1oT6fNxC+93mIYKQidkA175D99pIf5a/3N2xT+ZaooSNB RT7xVzMDA5FhN+ALPClCTWzOIqrIUU2S3kqbh8Vgl8XLGESWIlBaT3nHJF47X65QKSi0ikfRuXj Mc3f29SD7THatY2k0XY9uRDk4/wC+YqqMcQ65ZSQ== X-Received: by 2002:a25:2701:0:b0:de5:4bb7:b237 with SMTP id n1-20020a252701000000b00de54bb7b237mr332940ybn.39.1714067949564; Thu, 25 Apr 2024 10:59:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFcd/pK9HzI6TdJKcK2sJ2SMJbB+YKoIgtWffRKcqclnT3DlgMn8qOHVtG7+FEV4gh7sc/kpTRrpA8V2jeYFdA= X-Received: by 2002:a25:2701:0:b0:de5:4bb7:b237 with SMTP id n1-20020a252701000000b00de54bb7b237mr332927ybn.39.1714067949301; Thu, 25 Apr 2024 10:59:09 -0700 (PDT) MIME-Version: 1.0 References: <20240418195107.1281808-1-jwakely@redhat.com> <20240418195107.1281808-3-jwakely@redhat.com> In-Reply-To: From: Jonathan Wakely Date: Thu, 25 Apr 2024 18:58:53 +0100 Message-ID: Subject: [gcc-13 PATCH 2/2 v3] libstdc++: Add libstdc++_libbacktrace.a to libstdc++exp To: "libstdc++" , gcc Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.8 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_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org On Thu, 18 Apr 2024 at 21:34, Jonathan Wakely wrote: > > On Thu, 18 Apr 2024 at 20:51, Jonathan Wakely wrote: > > > > This completes the fixes to put all experimental symbols into > > libstdc++exp.a. > > > > On trunk the libstdc++_libbacktrace.a was removed completely and its > > contents aded to libstdc++exp.a instead. We don't want to do that on the > > gcc-13 branch because it will break makefiles using it. We can add the > > contents to libstdc++exp.a and then install a symlink so that > > -lstdc++_libbacktrace still works, but links to libstdc++exp.a instead. > > It looks like simply duplicating all the libstdc___libbacktrace_FOO > variables in libbacktrace/Makefile.am does work (see attached patch), > so that we get an installed libstdc++_libbacktrace.a and a > not-installed libstdc++_libbacktraceconvenience.a which gets included > into the installed libstdc++exp.a > > So if that's preferable to making the installed > libstdc++_libbacktrace.a a symlink, we can do that. > > I still kinda like the symlink approach, because it reduces the size > on disk, and the same approach could be used to get rid of > libstdc++fs.a without breaking makefiles using -lstdc++fs I committed the symlink approach, but with a slightly different patch (attached). This one installs libstdc++_libbacktrace.a as a symlink, but also removes the .la libtool file for that archive, because I don't think it's any use. I also added an uninstall-local target so the symlink gets removed. commit f3cff718df0cf7590ccf9bc1d8cd17e4e08f1e6d Author: Jonathan Wakely Date: Thu Apr 18 17:26:55 2024 libstdc++: Add libstdc++_libbacktrace.a to libstdc++exp This completes the fixes to put all experimental symbols into libstdc++exp.a. On trunk the libstdc++_libbacktrace.a was removed completely and its contents aded to libstdc++exp.a instead. We don't want to remove it on the gcc-13 branch because that would break makefiles using it. We can add the contents to libstdc++exp.a and then install a symlink so that using -lstdc++_libbacktrace still works, but links to libstdc++exp.a instead. The libstdc++_libbacktrace.la libtool control file is removed by this change, because I'm pretty sure it's not actually useful, and I don't know whether it should be a symlink to libstdc++exp.la or a regular file that refers to libstdc++_libbacktrace.a. libstdc++-v3/ChangeLog: * src/experimental/Makefile.am (install-exec-local): New target. (uninstall-local): New target. * src/experimental/Makefile.in: Regenerate. * src/libbacktrace/Makefile.am: Build libstdc++_libbacktrace as noinst_LTLIBRARIES so it's only a convenience library. * src/libbacktrace/Makefile.in: Regenerate. diff --git a/libstdc++-v3/src/experimental/Makefile.am b/libstdc++-v3/src/experimental/Makefile.am index c5a38d882c2..6536e759abd 100644 --- a/libstdc++-v3/src/experimental/Makefile.am +++ b/libstdc++-v3/src/experimental/Makefile.am @@ -66,6 +66,15 @@ AM_CXXFLAGS = \ AM_MAKEFLAGS = \ "gxx_include_dir=$(gxx_include_dir)" +if ENABLE_BACKTRACE +install-exec-local: + -cd '$(DESTDIR)$(toolexeclibdir)' && \ + $(LN_S) libstdc++exp.a libstdc++_libbacktrace.a +uninstall-local: + -cd '$(DESTDIR)$(toolexeclibdir)' && \ + rm -f libstdc++_libbacktrace.a +endif + # Libtool notes # 1) In general, libtool expects an argument such as `--tag=CXX' when diff --git a/libstdc++-v3/src/experimental/Makefile.in b/libstdc++-v3/src/experimental/Makefile.in index c16083a7fc8..238c96d9f9a 100644 --- a/libstdc++-v3/src/experimental/Makefile.in +++ b/libstdc++-v3/src/experimental/Makefile.in @@ -712,6 +712,8 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." +@ENABLE_BACKTRACE_FALSE@install-exec-local: +@ENABLE_BACKTRACE_FALSE@uninstall-local: clean: clean-am clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \ @@ -740,7 +742,7 @@ install-dvi: install-dvi-am install-dvi-am: -install-exec-am: install-toolexeclibLTLIBRARIES +install-exec-am: install-exec-local install-toolexeclibLTLIBRARIES install-html: install-html-am @@ -779,7 +781,7 @@ ps: ps-am ps-am: -uninstall-am: uninstall-toolexeclibLTLIBRARIES +uninstall-am: uninstall-local uninstall-toolexeclibLTLIBRARIES .MAKE: install-am install-strip @@ -789,18 +791,25 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES distclean-libtool distclean-tags dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip install-toolexeclibLTLIBRARIES \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ - uninstall-toolexeclibLTLIBRARIES + install-exec-local install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip \ + install-toolexeclibLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-local uninstall-toolexeclibLTLIBRARIES .PRECIOUS: Makefile +@ENABLE_BACKTRACE_TRUE@install-exec-local: +@ENABLE_BACKTRACE_TRUE@ -cd '$(DESTDIR)$(toolexeclibdir)' && \ +@ENABLE_BACKTRACE_TRUE@ $(LN_S) libstdc++exp.a libstdc++_libbacktrace.a +@ENABLE_BACKTRACE_TRUE@uninstall-local: +@ENABLE_BACKTRACE_TRUE@ -cd '$(DESTDIR)$(toolexeclibdir)' && \ +@ENABLE_BACKTRACE_TRUE@ rm -f libstdc++_libbacktrace.a + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/libstdc++-v3/src/libbacktrace/Makefile.am b/libstdc++-v3/src/libbacktrace/Makefile.am index 3992f3ab9c5..4a08f11da1e 100644 --- a/libstdc++-v3/src/libbacktrace/Makefile.am +++ b/libstdc++-v3/src/libbacktrace/Makefile.am @@ -31,7 +31,7 @@ include $(top_srcdir)/fragment.am -toolexeclib_LTLIBRARIES = libstdc++_libbacktrace.la +noinst_LTLIBRARIES = libstdc++_libbacktrace.la ACLOCAL_AMFLAGS = -I ../.. -I ../../config diff --git a/libstdc++-v3/src/libbacktrace/Makefile.in b/libstdc++-v3/src/libbacktrace/Makefile.in index f5f19149ae6..6b898f65b06 100644 --- a/libstdc++-v3/src/libbacktrace/Makefile.in +++ b/libstdc++-v3/src/libbacktrace/Makefile.in @@ -150,35 +150,7 @@ DIST_COMMON = $(srcdir)/Makefile.am CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = backtrace-supported.h CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(toolexeclibdir)" -LTLIBRARIES = $(toolexeclib_LTLIBRARIES) +LTLIBRARIES = $(noinst_LTLIBRARIES) am_libstdc___libbacktrace_la_OBJECTS = $(obj_prefix)-atomic.lo \ $(obj_prefix)-backtrace.lo $(obj_prefix)-dwarf.lo \ $(obj_prefix)-fileline.lo $(obj_prefix)-posix.lo \ @@ -484,7 +456,7 @@ WARN_CXXFLAGS = \ # -I/-D flags to pass when compiling. AM_CPPFLAGS = $(GLIBCXX_INCLUDES) $(CPPFLAGS) -toolexeclib_LTLIBRARIES = libstdc++_libbacktrace.la +noinst_LTLIBRARIES = libstdc++_libbacktrace.la ACLOCAL_AMFLAGS = -I ../.. -I ../../config # This will be used instead of the common AM_CPPFLAGS from fragment.am @@ -594,33 +566,9 @@ $(am__aclocal_m4_deps): backtrace-supported.h: $(top_builddir)/config.status $(srcdir)/backtrace-supported.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(toolexeclibdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(toolexeclibdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(toolexeclibdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(toolexeclibdir)"; \ - } - -uninstall-toolexeclibLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$f"; \ - done - -clean-toolexeclibLTLIBRARIES: - -test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES) - @list='$(toolexeclib_LTLIBRARIES)'; \ +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ @@ -630,7 +578,7 @@ clean-toolexeclibLTLIBRARIES: } libstdc++_libbacktrace.la: $(libstdc___libbacktrace_la_OBJECTS) $(libstdc___libbacktrace_la_DEPENDENCIES) $(EXTRA_libstdc___libbacktrace_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) -rpath $(toolexeclibdir) $(libstdc___libbacktrace_la_OBJECTS) $(libstdc___libbacktrace_la_LIBADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(libstdc___libbacktrace_la_OBJECTS) $(libstdc___libbacktrace_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -756,9 +704,6 @@ check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: - for dir in "$(DESTDIR)$(toolexeclibdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -791,7 +736,7 @@ maintainer-clean-generic: @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \ +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am @@ -817,7 +762,7 @@ install-dvi: install-dvi-am install-dvi-am: -install-exec-am: install-toolexeclibLTLIBRARIES +install-exec-am: install-html: install-html-am @@ -856,24 +801,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-toolexeclibLTLIBRARIES +uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-toolexeclibLTLIBRARIES cscopelist-am ctags \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip install-toolexeclibLTLIBRARIES \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ - uninstall-toolexeclibLTLIBRARIES + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am .PRECIOUS: Makefile