Rearranged so libeazelinstall is built before rpmview

* components/Makefile.am:
	Rearranged so libeazelinstall is built before rpmview

	* components/help/Makefile.am:
	Added a missing .h file so make dist works

	* components/rpmview/Makefile.am:
	* components/rpmview/nautilus-rpm-view-install.c:
	(nautilus_rpm_view_download_progress_signal),
	(nautilus_rpm_view_install_progress_signal),
	(nautilus_rpm_view_download_failed),
	(nautilus_rpm_view_install_failed_helper),
	(nautilus_rpm_view_install_failed),
	(nautilus_rpm_view_dependency_check),
	(nautilus_rpm_view_install_done),
	(nautilus_rpm_view_install_package_callback):
	* components/rpmview/nautilus-rpm-view-install.h:
	* components/rpmview/nautilus-rpm-view.c:
	(nautilus_rpm_view_initialize):
	Added a callback and some skeleton code to the install
	button. So it now does rpm installs.

	* components/services/install/lib/Makefile.am:
	* components/services/install/command-line/Makefile.am:
	Changed the libnames.
	*
	components/services/install/command-line/eazel-alt-install-corba.c:
	(done), (main):
	* components/services/install/lib/eazel-install-corba-callback.c:
	(eazel_install_callback_destroy),
	(eazel_install_callback_initialize), (eazel_install_callback_new),
	(eazel_install_callback_corba_objref),
	(eazel_install_callback_install_packages),
	(eazel_install_callback_query):
	* components/services/install/lib/eazel-install-corba-callback.h:
	* components/services/install/lib/eazel-install-corba-types.h:
	* components/services/install/lib/eazel-install-protocols.c:
	(get_search_url_for_package):
	* components/services/install/server/Makefile.am:
	* components/services/install/server/main.c:
	Changed the object destroction scheme, so eazel_install_callback
	now unrefs and destroys the bonobo object.

	* components/services/trilobite/sample/lib/Makefile.am:
	Fixed to pass make dist

	* nautilus-installer/src/Makefile:
	* nautilus-installer/src/Makefile.am:
	Patching so it works with the new installer libs (and still some
	stroking because of the static stuff)

	* nautilus.spec.in:
	* po/POTFILES.in:
	* test/Makefile.am:
	Slice and dice so make dist and rpm -ta works again.
This commit is contained in:
Eskil Heyn Olsen 2000-06-27 01:58:34 +00:00
parent 06a43fbbb5
commit 8491d1a326
13 changed files with 325 additions and 15 deletions

View file

@ -1,3 +1,61 @@
2000-06-26 Eskil Heyn Olsen <eskil@eazel.com>
* components/Makefile.am:
Rearranged so libeazelinstall is built before rpmview
* components/help/Makefile.am:
Added a missing .h file so make dist works
* components/rpmview/Makefile.am:
* components/rpmview/nautilus-rpm-view-install.c:
(nautilus_rpm_view_download_progress_signal),
(nautilus_rpm_view_install_progress_signal),
(nautilus_rpm_view_download_failed),
(nautilus_rpm_view_install_failed_helper),
(nautilus_rpm_view_install_failed),
(nautilus_rpm_view_dependency_check),
(nautilus_rpm_view_install_done),
(nautilus_rpm_view_install_package_callback):
* components/rpmview/nautilus-rpm-view-install.h:
* components/rpmview/nautilus-rpm-view.c:
(nautilus_rpm_view_initialize):
Added a callback and some skeleton code to the install
button. So it now does rpm installs.
* components/services/install/lib/Makefile.am:
* components/services/install/command-line/Makefile.am:
Changed the libnames.
*
components/services/install/command-line/eazel-alt-install-corba.c:
(done), (main):
* components/services/install/lib/eazel-install-corba-callback.c:
(eazel_install_callback_destroy),
(eazel_install_callback_initialize), (eazel_install_callback_new),
(eazel_install_callback_corba_objref),
(eazel_install_callback_install_packages),
(eazel_install_callback_query):
* components/services/install/lib/eazel-install-corba-callback.h:
* components/services/install/lib/eazel-install-corba-types.h:
* components/services/install/lib/eazel-install-protocols.c:
(get_search_url_for_package):
* components/services/install/server/Makefile.am:
* components/services/install/server/main.c:
Changed the object destroction scheme, so eazel_install_callback
now unrefs and destroys the bonobo object.
* components/services/trilobite/sample/lib/Makefile.am:
Fixed to pass make dist
* nautilus-installer/src/Makefile:
* nautilus-installer/src/Makefile.am:
Patching so it works with the new installer libs (and still some
stroking because of the static stuff)
* nautilus.spec.in:
* po/POTFILES.in:
* test/Makefile.am:
Slice and dice so make dist and rpm -ta works again.
2000-06-26 Andy Hertzfeld <andy@eazel.com>
* src/nautilus-sidebar.c: (nautilus_sidebar_update_info):
@ -5,7 +63,7 @@
call (and the corresponding unblock) when we set up the background
in update_info, so the new background data isn't written out to the
metafile, since no explicit change was made.
2000-06-26 Michael Engber <engber@eazel.com>
* libnautilus-extensions/nautilus-gtk-extensions.c:

View file

@ -20,10 +20,10 @@ SUBDIRS = \
loser \
music \
notes \
$(RPMVIEW_COMPONENT_SUBDIRS) \
sample \
tree \
websearch \
$(SERVICE_SUBDIRS) \
$(RPMVIEW_COMPONENT_SUBDIRS) \
$(MOZILLA_COMPONENT_SUBDIRS) \
$(NULL)

View file

@ -26,6 +26,7 @@ LDADD =\
$(XML_LIBS)
hyperbola_SOURCES= \
hyperbola-nav.h \
hyperbola-types.h \
hyperbola-nav-tree.c \
hyperbola-main.c \

View file

@ -6,6 +6,7 @@ CPPFLAGS = \
INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/components/services/install/lib \
-I$(top_builddir) \
-I/usr/include/rpm \
$(GCONF_CFLAGS) \
@ -24,6 +25,8 @@ bin_PROGRAMS = nautilus-rpm-view
nautilus_rpm_view_SOURCES = \
nautilus-rpm-view.h \
nautilus-rpm-view.c \
nautilus-rpm-view-install.h \
nautilus-rpm-view-install.c \
main.c
nautilus_rpm_view_LDADD = \
@ -34,6 +37,8 @@ nautilus_rpm_view_LDFLAGS = \
$(top_builddir)/libnautilus-extensions/libnautilus-extensions.la \
$(top_builddir)/cut-n-paste-code/widgets/e-paned/libe-paned.la \
$(top_builddir)/librsvg/librsvg.la \
$(top_builddir)/components/services/install/lib/libeazelinstall.la \
$(top_builddir)/components/services/trilobite/libtrilobite/libtrilobite.la \
$(BONOBO_LIBS) \
$(GCONF_LIBS) \
$(GNOMEUI_LIBS) \

View file

@ -0,0 +1,208 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Copyright (C) 2000 Eazel, Inc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Authors: Eskil Heyn Olsen <eskil@eazel.com>
*/
#include "nautilus-rpm-view-install.h"
#include <libtrilobite/helixcode-utils.h>
#include <libeazelinstall.h>
#define OAF_ID "OAFIID:trilobite_eazel_install_service:8ff6e815-1992-437c-9771-d932db3b4a17"
struct NautilusRPMViewDetails {
char *current_uri;
NautilusView *nautilus_view;
};
static void
nautilus_rpm_view_download_progress_signal (EazelInstallCallback *service,
const char *name,
int amount,
int total,
NautilusRPMView *rpm_view)
{
fprintf (stdout, "Download progress - %s %% %f\r", name,
(total ? ((float)
((((float) amount) / total) * 100))
: 100.0));
fflush (stdout);
if (amount == total && total!=0) {
fprintf (stdout, "\n");
}
}
static void
nautilus_rpm_view_install_progress_signal (EazelInstallCallback *service,
const PackageData *pack,
int amount,
int total,
NautilusRPMView *rpm_view)
{
fprintf (stdout, "Install progress - %s %% %f\r", pack->name,
(total ? ((float)
((((float) amount) / total) * 100))
: 100.0));
fflush (stdout);
if (amount == total && total!=0) {
fprintf (stdout, "\n");
}
}
static void
nautilus_rpm_view_download_failed (EazelInstallCallback *service,
const char *name,
NautilusRPMView *rpm_view)
{
fprintf (stdout, "Download of %s FAILED\n", name);
}
/*
This dumps the entire tree for the failed package.
*/
static void
nautilus_rpm_view_install_failed_helper (EazelInstallCallback *service,
const PackageData *pd,
gchar *indent,
NautilusRPMView *rpm_view)
{
GList *iterator;
if (pd->toplevel) {
fprintf (stdout, "\n***The package %s failed. Here's the dep tree\n", pd->name);
}
switch (pd->status) {
case PACKAGE_DEPENDENCY_FAIL:
fprintf (stdout, "%s-%s FAILED\n", indent, rpmfilename_from_packagedata (pd));
break;
case PACKAGE_CANNOT_OPEN:
fprintf (stdout, "%s-%s NOT FOUND\n", indent, rpmfilename_from_packagedata (pd));
break;
case PACKAGE_SOURCE_NOT_SUPPORTED:
fprintf (stdout, "%s-%s is a source package\n", indent, rpmfilename_from_packagedata (pd));
break;
case PACKAGE_BREAKS_DEPENDENCY:
fprintf (stdout, "%s-%s breaks\n", indent, rpmfilename_from_packagedata (pd));
break;
default:
fprintf (stdout, "%s-%s\n", indent, rpmfilename_from_packagedata (pd));
break;
}
for (iterator = pd->soft_depends; iterator; iterator = iterator->next) {
PackageData *pack;
char *indent2;
indent2 = g_strconcat (indent, iterator->next ? " |" : " " , NULL);
pack = (PackageData*)iterator->data;
nautilus_rpm_view_install_failed_helper (service, pack, indent2, rpm_view);
g_free (indent2);
}
for (iterator = pd->breaks; iterator; iterator = iterator->next) {
PackageData *pack;
char *indent2;
indent2 = g_strconcat (indent, iterator->next ? " |" : " " , NULL);
pack = (PackageData*)iterator->data;
nautilus_rpm_view_install_failed_helper (service, pack, indent2, rpm_view);
g_free (indent2);
}
}
static void
nautilus_rpm_view_install_failed (EazelInstallCallback *service,
const PackageData *pd,
NautilusRPMView *rpm_view)
{
nautilus_rpm_view_install_failed_helper (service, pd, "", rpm_view);
}
static void
nautilus_rpm_view_dependency_check (EazelInstallCallback *service,
const PackageData *package,
const PackageData *needs,
NautilusRPMView *rpm_view)
{
g_message ("Doing dependency check for %s - need %s\n", package->name, needs->name);
}
static void
nautilus_rpm_view_install_done (EazelInstallCallback *service,
NautilusRPMView *rpm_view)
{
eazel_install_callback_destroy (GTK_OBJECT (service));
}
void
nautilus_rpm_view_install_package_callback (GtkWidget *widget,
NautilusRPMView *rpm_view)
{
GList *packages;
GList *categories;
CORBA_Environment ev;
EazelInstallCallback *cb;
CORBA_exception_init (&ev);
packages = NULL;
categories = NULL;
{
char *ptr;
CategoryData *category;
PackageData *pack;
/* I need a clean way to get the filename... */
ptr = rpm_view->details->current_uri + strlen (rpm_view->details->current_uri) - 1;
while (ptr != rpm_view->details->current_uri && *ptr!='/') { ptr--; };
ptr++;
pack = packagedata_new ();
pack->filename = g_strdup (ptr);
category = g_new0 (CategoryData, 1);
category->packages = g_list_prepend (NULL, pack);
categories = g_list_prepend (NULL, category);
}
/* Check that we're on a redhat system */
if (check_for_redhat () == FALSE) {
fprintf (stderr, "*** This tool can only be used on RedHat.\n");
}
cb = eazel_install_callback_new ();
Trilobite_Eazel_Install__set_protocol (eazel_install_callback_corba_objref (cb), Trilobite_Eazel_PROTOCOL_HTTP, &ev);
if (check_for_root_user() == FALSE) {
fprintf (stderr, "*** This tool requires root access, switching to test mode\n");
Trilobite_Eazel_Install__set_test_mode (eazel_install_callback_corba_objref (cb), TRUE, &ev);
} else {
Trilobite_Eazel_Install__set_test_mode (eazel_install_callback_corba_objref (cb), FALSE, &ev);
}
Trilobite_Eazel_Install__set_tmp_dir (eazel_install_callback_corba_objref (cb), "/tmp/eazel-install", &ev);
Trilobite_Eazel_Install__set_server (eazel_install_callback_corba_objref (cb), "testmachine.eazel.com", &ev);
Trilobite_Eazel_Install__set_server_port (eazel_install_callback_corba_objref (cb), 80, &ev);
gtk_signal_connect (GTK_OBJECT (cb), "download_progress", nautilus_rpm_view_download_progress_signal, rpm_view);
gtk_signal_connect (GTK_OBJECT (cb), "install_progress", nautilus_rpm_view_install_progress_signal, rpm_view);
gtk_signal_connect (GTK_OBJECT (cb), "install_failed", nautilus_rpm_view_install_failed, rpm_view);
gtk_signal_connect (GTK_OBJECT (cb), "download_failed", nautilus_rpm_view_download_failed, rpm_view);
gtk_signal_connect (GTK_OBJECT (cb), "dependency_check", nautilus_rpm_view_dependency_check, rpm_view);
gtk_signal_connect (GTK_OBJECT (cb), "done", nautilus_rpm_view_install_done, rpm_view);
eazel_install_callback_install_packages (cb, categories, &ev);
CORBA_exception_free (&ev);
}

View file

@ -0,0 +1,31 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Copyright (C) 2000 Eazel, Inc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Authors: Eskil Heyn Olsen <eskil@eazel.com>
*/
#ifndef NAUTILUS_RPM_VIEW_INSTALL_H
#define NAUTILUS_RPM_VIEW_INSTALL_H
#include "nautilus-rpm-view.h"
void nautilus_rpm_view_install_package_callback (GtkWidget *widget,
NautilusRPMView *rpm_view);
#endif /* NAUTILUS_RPM_VIEW_INSTALL_H */

View file

@ -24,7 +24,9 @@
/* The RPM view component is used to provide an easy-to-use overview of a rpm package */
#include <config.h>
#include "nautilus-rpm-view.h"
#include "nautilus-rpm-view-install.h"
#include <sys/types.h>
#include <sys/stat.h>
@ -124,7 +126,6 @@ static void file_selection_callback (GtkCList *clist,
static void go_to_button_callback (GtkWidget *widget,
NautilusRPMView *rpm_view);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusRPMView, nautilus_rpm_view, GTK_TYPE_EVENT_BOX)
static void
@ -290,6 +291,11 @@ nautilus_rpm_view_initialize (NautilusRPMView *rpm_view)
gtk_box_pack_start(GTK_BOX (temp_box), rpm_view->details->package_install_button,
FALSE, FALSE, 2);
gtk_widget_show(rpm_view->details->package_install_button);
gtk_signal_connect (GTK_OBJECT (rpm_view->details->package_install_button),
"clicked",
GTK_SIGNAL_FUNC (nautilus_rpm_view_install_package_callback),
rpm_view);
/* update button */
rpm_view->details->package_update_button = gtk_button_new();

View file

@ -36,6 +36,10 @@ sample-service.h: $(IDL)
CLEANFILES+=$(CORBA_GENERATED) sample-service.h
noinst_HEADERS = \
sample-service-public.h \
$(NULL)
libsample_corba_a_SOURCES = \
$(CORBA_GENERATED) \
$(NULL)

View file

@ -61,7 +61,7 @@ host_alias = i686-pc-linux-gnu
host_triplet = i686-pc-linux-gnu
AS = @AS@
BONOBO_CFLAGS = -I/gnome/include -DNEED_GNOMESUPPORT_H -I/gnome/lib/gnome-libs/include -I/gnome/lib/glib/include -I/usr/X11R6/include -I/gnome/include/gnome-xml
BONOBO_LIBS = -rdynamic -L/gnome/lib -L/usr/X11R6/lib -L/usr/lib -lbonobo -lgnomeprint -lgnomeui -lart_lgpl -lgdk_imlib -lSM -lICE -lgtk -lgdk -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -ldb1 -lgmodule -ldl -lgdk_pixbuf -ltiff -ljpeg -lpng -lxml -lz -loaf -lORBitCosNaming -lORBit -lIIOP -lORBitutil -lglib -lnsl -lm
BONOBO_LIBS = -rdynamic -L/gnome/lib -L/usr/X11R6/lib -L/usr/lib -lbonobo -lgnomeprint -lgnomeui -lart_lgpl -lgdk_imlib -lSM -lICE -lgnome -lgnomesupport -lesd -laudiofile -ldb1 -lgdk_pixbuf -ltiff -ljpeg -lpng -lgtk -lgdk -lgmodule -ldl -lXext -lX11 -lxml -lz -loaf -lORBitCosNaming -lORBit -lIIOP -lORBitutil -lglib -lnsl -lm
CATALOGS =
CATOBJEXT = .gmo
CC = gcc
@ -159,7 +159,7 @@ nautilus_installer_SOURCES = main.c support.c support.h interface.c interfac
nautilus_installer_LDFLAGS = -static
nautilus_installer_LDADD = $(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o $(top_builddir)/components/services/install/lib/libinstall_gtk.a $(top_builddir)/components/services/install/lib/libinstall_base.a -L/gnome/lib -lgnomeui -lgnome -lart_lgpl -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -L/usr/X11R6/lib -ldl -lXext -lX11 -lm -lSM -lICE /usr/lib/libesd.a /usr/lib/libaudiofile.a -lghttp -L/usr/lib -lrpm -lz -ldb1 -lpopt -lxml
nautilus_installer_LDADD = $(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o $(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o $(top_builddir)/components/services/install/lib/libeazelinstall_minimal.a -L/gnome/lib -lgnomeui -lgnome -lart_lgpl -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -L/usr/X11R6/lib -ldl -lXext -lX11 -lm -lSM -lICE /usr/lib/libesd.a /usr/lib/libaudiofile.a -lghttp -L/usr/lib -lrpm -lz -ldb1 -lpopt -lxml
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../config.h
@ -176,8 +176,7 @@ installer.o
nautilus_installer_DEPENDENCIES = \
$(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o \
$(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o \
$(top_builddir)/components/services/install/lib/libinstall_gtk.a \
$(top_builddir)/components/services/install/lib/libinstall_base.a \
$(top_builddir)/components/services/install/lib/libeazelinstall_minimal.a \
/usr/lib/libesd.a /usr/lib/libaudiofile.a
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)

View file

@ -31,8 +31,7 @@ nautilus_installer_LDFLAGS = -static
nautilus_installer_LDADD = \
$(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o \
$(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o \
$(top_builddir)/components/services/install/lib/libinstall_gtk.a \
$(top_builddir)/components/services/install/lib/libinstall_base.a \
$(top_builddir)/components/services/install/lib/libeazelinstall_minimal.a \
-L/gnome/lib \
-lgnomeui \
-lgnome \

View file

@ -123,10 +123,8 @@ fi
%{prefix}/share/nautilus/backgrounds/*.jpg
%{prefix}/share/nautilus/backgrounds/*.png
%{prefix}/share/nautilus/emblems/*.gif
%{prefix}/share/nautilus/linksets/*.xml
%{prefix}/share/nautilus/top/*.html
%{prefix}/share/nautilus/top/*.link
%{prefix}/share/ntl-web-search/*.eng
%{prefix}/share/oaf/*.oafinfo
%{prefix}/share/pixmaps/nautilus*.*
%{prefix}/share/pixmaps/trilobite*

View file

@ -3,7 +3,6 @@ components/help/hyperbola-nav-index.c
components/help/hyperbola-types.h
components/history/nautilus-history-view.c
components/html/gnome-dialogs.c
components/html/main.c
components/html/ntl-web-browser.c
components/loser/content/nautilus-content-loser.c
components/loser/sidebar/nautilus-sidebar-loser.c
@ -12,8 +11,7 @@ components/music/nautilus-music-view.c
components/notes/nautilus-notes.c
components/rpmview/nautilus-rpm-view.c
components/sample/nautilus-sample-content-view.c
components/services/install/command-line/eazel-alt-install.c
components/services/install/command-line/eazel-install.c
components/services/install/command-line/eazel-alt-install-corba.c
components/services/install/lib/eazel-install-metadata.c
components/services/install/lib/eazel-install-object.c
components/services/install/lib/eazel-install-protocols.c
@ -27,7 +25,6 @@ components/services/time/nautilus-view/trilobite-eazel-time-view.c
components/services/time/nautilus-view/trilobite-eazel-time-view.c
components/services/time/service/main.c
components/services/time/service/trilobite-eazel-time-service.c
components/shell/shell.c
components/websearch/ntl-web-search.c
libnautilus-extensions/nautilus-entry.c
libnautilus-extensions/nautilus-file.c

View file

@ -75,6 +75,10 @@ CLEANFILES += libleakcheck.so
libleakcheck.so: nautilus-leak-checker.c nautilus-leak-hash-table.c nautilus-leak-symbol-lookup.c
gcc nautilus-leak-checker.c nautilus-leak-hash-table.c nautilus-leak-symbol-lookup.c -Wall -o $@ -shared $(GLIB_CFLAGS) $(GLIB_LIBS) -lpthread -ldl -Wl,-Bstatic -lbfd -liberty -Wl,-Bdynamic
# to include them in "make dist"
EXTRA_DIST = nautilus-leak-checker.c nautilus-leak-hash-table.c nautilus-leak-symbol-lookup.c \
nautilus-leak-checker-stubs.h nautilus-leak-hash-table.h nautilus-leak-checker.h nautilus-leak-symbol-lookup.h
leakcheck_DATA = libleakcheck.so
leakcheckdir= $(DESTDIR)$(libdir)