summaryrefslogtreecommitdiff
path: root/var/spack/packages/libmonitor
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/packages/libmonitor')
-rw-r--r--var/spack/packages/libmonitor/libmonitorkrell-0000.patch18
-rw-r--r--var/spack/packages/libmonitor/libmonitorkrell-0001.patch395
-rw-r--r--var/spack/packages/libmonitor/libmonitorkrell-0002.patch106
-rw-r--r--var/spack/packages/libmonitor/package.py9
4 files changed, 527 insertions, 1 deletions
diff --git a/var/spack/packages/libmonitor/libmonitorkrell-0000.patch b/var/spack/packages/libmonitor/libmonitorkrell-0000.patch
new file mode 100644
index 0000000000..3a90106850
--- /dev/null
+++ b/var/spack/packages/libmonitor/libmonitorkrell-0000.patch
@@ -0,0 +1,18 @@
+--- libmonitor-20130218/configure 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/configure 2013-02-18 10:34:05.237918411 -0800
+@@ -3600,13 +3600,13 @@
+ CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+- CFLAGS="-g -O2"
++ CFLAGS="-g -O0"
+ else
+ CFLAGS="-g"
+ fi
+ else
+ if test "$GCC" = yes; then
+- CFLAGS="-O2"
++ CFLAGS="-O0"
+ else
+ CFLAGS=
+ fi
diff --git a/var/spack/packages/libmonitor/libmonitorkrell-0001.patch b/var/spack/packages/libmonitor/libmonitorkrell-0001.patch
new file mode 100644
index 0000000000..85d69595c0
--- /dev/null
+++ b/var/spack/packages/libmonitor/libmonitorkrell-0001.patch
@@ -0,0 +1,395 @@
+--- libmonitor-20130218/src/callback.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/callback.c 2013-02-18 10:34:17.839842826 -0800
+@@ -173,3 +173,18 @@
+ MONITOR_DEBUG1("(default callback)\n");
+ return 0;
+ }
++
++
++void __attribute__ ((weak))
++monitor_mpi_post_comm_rank(void)
++{
++ MONITOR_DEBUG1("(default callback)\n");
++}
++
++void __attribute__ ((weak))
++monitor_mpi_pcontrol(int level)
++{
++ MONITOR_DEBUG("(default callback) level = %d\n", level);
++}
++
++
+--- libmonitor-20130218/src/main.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/main.c 2013-02-18 10:34:17.839842826 -0800
+@@ -230,6 +230,44 @@
+ monitor_fini_library_called = 1;
+ }
+
++/*
++ * Internal monitor functions.
++ */
++
++struct monitor_thread_node * __attribute__ ((weak))
++monitor_get_tn(void)
++{
++ return &monitor_main_tn;
++}
++
++int __attribute__ ((weak))
++monitor_get_thread_num(void)
++{
++ return (0);
++}
++
++void __attribute__ ((weak))
++monitor_reset_thread_list(struct monitor_thread_node *main_tn)
++{
++ MONITOR_DEBUG1("(weak)\n");
++ return;
++}
++
++void __attribute__ ((weak))
++monitor_thread_release(void)
++{
++ MONITOR_DEBUG1("(weak)\n");
++ return;
++}
++
++void __attribute__ ((weak))
++monitor_thread_shootdown(void)
++{
++ MONITOR_DEBUG1("(weak)\n");
++ return;
++}
++
++
+ void
+ monitor_begin_process_fcn(void *user_data, int is_fork)
+ {
+@@ -625,12 +663,6 @@
+ return (monitor_main_tn.tn_user_data);
+ }
+
+-int __attribute__ ((weak))
+-monitor_get_thread_num(void)
+-{
+- return (0);
+-}
+-
+ void * __attribute__ ((weak))
+ monitor_get_addr_thread_start(void)
+ {
+@@ -691,33 +723,3 @@
+ MONITOR_DEBUG1("(weak)\n");
+ return (FALSE);
+ }
+-
+-/*
+- * Internal monitor functions.
+- */
+-struct monitor_thread_node * __attribute__ ((weak))
+-monitor_get_tn(void)
+-{
+- return &monitor_main_tn;
+-}
+-
+-void __attribute__ ((weak))
+-monitor_reset_thread_list(struct monitor_thread_node *main_tn)
+-{
+- MONITOR_DEBUG1("(weak)\n");
+- return;
+-}
+-
+-void __attribute__ ((weak))
+-monitor_thread_release(void)
+-{
+- MONITOR_DEBUG1("(weak)\n");
+- return;
+-}
+-
+-void __attribute__ ((weak))
+-monitor_thread_shootdown(void)
+-{
+- MONITOR_DEBUG1("(weak)\n");
+- return;
+-}
+--- libmonitor-20130218/src/monitor.h 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/monitor.h 2013-02-18 10:34:17.840842821 -0800
+@@ -73,6 +73,11 @@
+ extern void monitor_fini_mpi(void);
+ extern void monitor_mpi_post_fini(void);
+
++extern void monitor_mpi_post_comm_rank(void);
++extern void monitor_mpi_pcontrol(int level);
++
++
++
+ /*
+ * Monitor support functions.
+ */
+--- libmonitor-20130218/src/mpi_comm_c.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_comm_c.c 2013-02-18 10:34:17.878842622 -0800
+@@ -36,5 +36,8 @@
+ ret = (*real_mpi_comm_rank)(comm, rank);
+ monitor_set_mpi_size_rank(size, *rank);
+
++ monitor_mpi_post_comm_rank();
++
++
+ return (ret);
+ }
+--- libmonitor-20130218/src/mpi_comm_f0.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_comm_f0.c 2013-02-18 10:34:17.879842617 -0800
+@@ -34,4 +34,5 @@
+ (*real_mpi_comm_size)(comm, &size, ierror);
+ (*real_mpi_comm_rank)(comm, rank, ierror);
+ monitor_set_mpi_size_rank(size, *rank);
++ monitor_mpi_post_comm_rank();
+ }
+--- libmonitor-20130218/src/mpi_comm_f1.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_comm_f1.c 2013-02-18 10:34:17.880842612 -0800
+@@ -34,4 +34,5 @@
+ (*real_mpi_comm_size)(comm, &size, ierror);
+ (*real_mpi_comm_rank)(comm, rank, ierror);
+ monitor_set_mpi_size_rank(size, *rank);
++ monitor_mpi_post_comm_rank();
+ }
+--- libmonitor-20130218/src/mpi_comm_f2.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_comm_f2.c 2013-02-18 10:34:17.880842612 -0800
+@@ -34,4 +34,5 @@
+ (*real_mpi_comm_size)(comm, &size, ierror);
+ (*real_mpi_comm_rank)(comm, rank, ierror);
+ monitor_set_mpi_size_rank(size, *rank);
++ monitor_mpi_post_comm_rank();
+ }
+--- libmonitor-20130218/src/pmpi.c 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/pmpi.c 2013-02-18 10:34:17.881842607 -0800
+@@ -52,11 +52,15 @@
+ typedef int mpi_init_thread_fcn_t(int *, char ***, int, int *);
+ typedef int mpi_finalize_fcn_t(void);
+ typedef int mpi_comm_fcn_t(void *, int *);
++typedef int mpi_pcontrol_fcn_t(int );
++
+
+ typedef void f_mpi_init_fcn_t(int *);
+ typedef void f_mpi_init_thread_fcn_t(int *, int *, int *);
+ typedef void f_mpi_finalize_fcn_t(int *);
+ typedef void f_mpi_comm_fcn_t(int *, int *, int *);
++typedef int f_mpi_pcontrol_fcn_t(int );
++
+
+ static mpi_init_fcn_t *real_pmpi_init = NULL;
+ static f_mpi_init_fcn_t *real_pmpi_init_f0 = NULL;
+@@ -83,6 +87,12 @@
+ static f_mpi_comm_fcn_t *real_pmpi_comm_rank_f1 = NULL;
+ static f_mpi_comm_fcn_t *real_pmpi_comm_rank_f2 = NULL;
+
++static mpi_pcontrol_fcn_t *real_pmpi_pcontrol = NULL;
++static f_mpi_pcontrol_fcn_t *real_pmpi_pcontrol_f0 = NULL;
++static f_mpi_pcontrol_fcn_t *real_pmpi_pcontrol_f1 = NULL;
++static f_mpi_pcontrol_fcn_t *real_pmpi_pcontrol_f2 = NULL;
++
++
+ /*
+ *----------------------------------------------------------------------
+ * PMPI_INIT OVERRIDE FUNCTIONS
+@@ -297,6 +307,7 @@
+ ret = (*real_pmpi_comm_size)(comm, &size);
+ ret = (*real_pmpi_comm_rank)(comm, rank);
+ monitor_set_mpi_size_rank(size, *rank);
++ monitor_mpi_post_comm_rank();
+
+ return (ret);
+ }
+@@ -308,7 +319,9 @@
+ MONITOR_GET_REAL_NAME_WRAP(rank_var, rank_fcn); \
+ (*size_var)(comm, &size, ierror); \
+ (*rank_var)(comm, rank, ierror); \
+- monitor_set_mpi_size_rank(size, *rank);
++ monitor_set_mpi_size_rank(size, *rank); \
++ monitor_mpi_post_comm_rank();
++
+
+ /*
+ * In Fortran, MPI_Comm is always int.
+@@ -333,3 +346,48 @@
+ FORTRAN_COMM_RANK_BODY(real_pmpi_comm_size_f2, pmpi_comm_size__,
+ real_pmpi_comm_rank_f2, pmpi_comm_rank__);
+ }
++
++
++/*
++ *----------------------------------------------------------------------
++ * PMPI_PCONTROL OVERRIDE FUNCTIONS
++ *----------------------------------------------------------------------
++ */
++
++int
++MONITOR_WRAP_NAME(PMPI_Pcontrol)(int level)
++{
++ int ret;
++
++ MONITOR_DEBUG("level = %d\n", level); \
++ MONITOR_GET_REAL_NAME_WRAP(real_pmpi_pcontrol, PMPI_Pcontrol);
++ ret = (*real_pmpi_pcontrol) (level) ;
++ monitor_mpi_pcontrol(level);
++
++ return (ret);
++}
++
++#define FORTRAN_PCONTROL_BODY(var_name, fcn_name)\
++ int ret; \
++ MONITOR_DEBUG("level = %d\n", level); \
++ MONITOR_GET_REAL_NAME_WRAP(var_name, fcn_name); \
++ ret = (*var_name) (level) ; \
++ monitor_mpi_pcontrol(level);
++
++int
++MONITOR_WRAP_NAME(pmpi_pcontrol)(int level)
++{
++ FORTRAN_PCONTROL_BODY(real_pmpi_pcontrol_f0, pmpi_pcontrol);
++}
++
++int
++MONITOR_WRAP_NAME(pmpi_pcontrol_)(int level)
++{
++ FORTRAN_PCONTROL_BODY(real_pmpi_pcontrol_f1, pmpi_pcontrol_);
++}
++
++int
++MONITOR_WRAP_NAME(pmpi_pcontrol__)(int level)
++{
++ FORTRAN_PCONTROL_BODY(real_pmpi_pcontrol_f2, pmpi_pcontrol__);
++}
+--- libmonitor-20130218/src/mpi_pcontrol_c.c 1969-12-31 16:00:00.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_pcontrol_c.c 2013-02-18 10:34:17.882842602 -0800
+@@ -0,0 +1,30 @@
++/*
++ * Override MPI_Pcontrol in C/C++.
++ *
++ *
++ */
++
++#include "config.h"
++#include "common.h"
++#include "monitor.h"
++
++typedef int mpi_pcontrol_fcn_t(int level);
++#ifdef MONITOR_STATIC
++extern mpi_pcontrol_fcn_t __real_MPI_Pcontrol;
++#endif
++static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
++
++int
++MONITOR_WRAP_NAME(MPI_Pcontrol)(int level)
++{
++ int ret, count;
++
++ MONITOR_DEBUG("level = %d\n", level); \
++
++ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, MPI_Pcontrol);
++ ret = (*real_mpi_pcontrol)(level);
++ monitor_mpi_pcontrol(level);
++
++
++ return (ret);
++}
+--- libmonitor-20130218/src/mpi_pcontrol_f0.c 1969-12-31 16:00:00.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_pcontrol_f0.c 2013-02-18 10:34:17.882842602 -0800
+@@ -0,0 +1,24 @@
++/*
++ * Override mpi_pcontrol in Fortran.
++ *
++ */
++
++#include "config.h"
++#include "common.h"
++#include "monitor.h"
++
++typedef void mpi_pcontrol_fcn_t(int level);
++#ifdef MONITOR_STATIC
++extern mpi_pcontrol_fcn_t __real_mpi_pcontrol;
++#endif
++static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
++
++int
++MONITOR_WRAP_NAME(mpi_pcontrol)(int level)
++{
++ int count;
++
++ MONITOR_DEBUG1("\n");
++ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, mpi_pcontrol);
++ (*real_mpi_pcontrol)(level);
++}
+--- libmonitor-20130218/src/mpi_pcontrol_f1.c 1969-12-31 16:00:00.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_pcontrol_f1.c 2013-02-18 10:34:17.883842597 -0800
+@@ -0,0 +1,24 @@
++/*
++ * Override mpi_pcontrol_ in Fortran.
++ *
++ */
++
++#include "config.h"
++#include "common.h"
++#include "monitor.h"
++
++typedef void mpi_pcontrol_fcn_t(int level);
++#ifdef MONITOR_STATIC
++extern mpi_pcontrol_fcn_t __real_mpi_pcontrol_;
++#endif
++static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
++
++int
++MONITOR_WRAP_NAME(mpi_pcontrol_)(int level)
++{
++ int count;
++
++ MONITOR_DEBUG1("\n");
++ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, mpi_pcontrol_);
++ (*real_mpi_pcontrol)(level);
++}
+--- libmonitor-20130218/src/mpi_pcontrol_f2.c 1969-12-31 16:00:00.000000000 -0800
++++ libmonitor-20130218-fixes/src/mpi_pcontrol_f2.c 2013-02-18 10:34:17.883842597 -0800
+@@ -0,0 +1,24 @@
++/*
++ * Override mpi_pcontrol__ in Fortran.
++ *
++ */
++
++#include "config.h"
++#include "common.h"
++#include "monitor.h"
++
++typedef void mpi_pcontrol_fcn_t(int level);
++#ifdef MONITOR_STATIC
++extern mpi_pcontrol_fcn_t __real_mpi_pcontrol__;
++#endif
++static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
++
++int
++MONITOR_WRAP_NAME(mpi_pcontrol__)(int level)
++{
++ int count;
++
++ MONITOR_DEBUG1("\n");
++ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, mpi_pcontrol__);
++ (*real_mpi_pcontrol)(level);
++}
+--- libmonitor-20130218/src/Makefile.am 2013-02-17 23:08:32.000000000 -0800
++++ libmonitor-20130218-fixes/src/Makefile.am 2013-02-18 10:34:17.931842343 -0800
+@@ -38,10 +38,11 @@
+ MONITOR_THREAD_FILES = pthread.c
+ MONITOR_SCRIPT_FILES = monitor-link monitor-run
+ MONITOR_MPI_FILES = \
+- mpi_init_c.c mpi_init_thread_c.c mpi_final_c.c mpi_comm_c.c \
+- mpi_init_f0.c mpi_init_thread_f0.c mpi_final_f0.c mpi_comm_f0.c \
+- mpi_init_f1.c mpi_init_thread_f1.c mpi_final_f1.c mpi_comm_f1.c \
+- mpi_init_f2.c mpi_init_thread_f2.c mpi_final_f2.c mpi_comm_f2.c
++ mpi_init_c.c mpi_init_thread_c.c mpi_final_c.c mpi_comm_c.c mpi_pcontrol_c.c \
++ mpi_init_f0.c mpi_init_thread_f0.c mpi_final_f0.c mpi_comm_f0.c mpi_pcontrol_f0.c \
++ mpi_init_f1.c mpi_init_thread_f1.c mpi_final_f1.c mpi_comm_f1.c mpi_pcontrol_f1.c \
++ mpi_init_f2.c mpi_init_thread_f2.c mpi_final_f2.c mpi_comm_f2.c mpi_pcontrol_f2.c
++
+
+ include_HEADERS = monitor.h
+ bin_SCRIPTS =
diff --git a/var/spack/packages/libmonitor/libmonitorkrell-0002.patch b/var/spack/packages/libmonitor/libmonitorkrell-0002.patch
new file mode 100644
index 0000000000..514dfdf13e
--- /dev/null
+++ b/var/spack/packages/libmonitor/libmonitorkrell-0002.patch
@@ -0,0 +1,106 @@
+--- libmonitor-20130218/src/pmpi.c 2013-02-18 11:34:17.000000000 -0700
++++ libmonitor-20130218-fixed/src/pmpi.c 2013-04-11 10:03:59.300550393 -0600
+@@ -355,7 +355,7 @@
+ */
+
+ int
+-MONITOR_WRAP_NAME(PMPI_Pcontrol)(int level)
++MONITOR_WRAP_NAME(PMPI_Pcontrol)(int level, int *ierror )
+ {
+ int ret;
+
+@@ -375,19 +375,19 @@
+ monitor_mpi_pcontrol(level);
+
+ int
+-MONITOR_WRAP_NAME(pmpi_pcontrol)(int level)
++MONITOR_WRAP_NAME(pmpi_pcontrol)(int level, int *ierror )
+ {
+ FORTRAN_PCONTROL_BODY(real_pmpi_pcontrol_f0, pmpi_pcontrol);
+ }
+
+ int
+-MONITOR_WRAP_NAME(pmpi_pcontrol_)(int level)
++MONITOR_WRAP_NAME(pmpi_pcontrol_)(int level, int *ierror )
+ {
+ FORTRAN_PCONTROL_BODY(real_pmpi_pcontrol_f1, pmpi_pcontrol_);
+ }
+
+ int
+-MONITOR_WRAP_NAME(pmpi_pcontrol__)(int level)
++MONITOR_WRAP_NAME(pmpi_pcontrol__)(int level, int *ierror )
+ {
+ FORTRAN_PCONTROL_BODY(real_pmpi_pcontrol_f2, pmpi_pcontrol__);
+ }
+--- libmonitor-20130218/src/mpi_pcontrol_f0.c 2013-02-18 11:34:17.000000000 -0700
++++ libmonitor-20130218-fixed/src/mpi_pcontrol_f0.c 2013-04-11 10:13:47.783002000 -0600
+@@ -7,18 +7,18 @@
+ #include "common.h"
+ #include "monitor.h"
+
+-typedef void mpi_pcontrol_fcn_t(int level);
++typedef void mpi_pcontrol_fcn_t(int level, int *ierror);
+ #ifdef MONITOR_STATIC
+ extern mpi_pcontrol_fcn_t __real_mpi_pcontrol;
+ #endif
+ static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
+
+ int
+-MONITOR_WRAP_NAME(mpi_pcontrol)(int level)
++MONITOR_WRAP_NAME(mpi_pcontrol)(int level, int *ierror)
+ {
+ int count;
+
+ MONITOR_DEBUG1("\n");
+ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, mpi_pcontrol);
+- (*real_mpi_pcontrol)(level);
++ (*real_mpi_pcontrol)(level, ierror);
+ }
+--- libmonitor-20130218/src/mpi_pcontrol_f1.c 2013-02-18 11:34:17.000000000 -0700
++++ libmonitor-20130218-fixed/src/mpi_pcontrol_f1.c 2013-04-11 10:14:08.039214000 -0600
+@@ -7,18 +7,18 @@
+ #include "common.h"
+ #include "monitor.h"
+
+-typedef void mpi_pcontrol_fcn_t(int level);
++typedef void mpi_pcontrol_fcn_t(int level, int *ierror);
+ #ifdef MONITOR_STATIC
+ extern mpi_pcontrol_fcn_t __real_mpi_pcontrol_;
+ #endif
+ static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
+
+ int
+-MONITOR_WRAP_NAME(mpi_pcontrol_)(int level)
++MONITOR_WRAP_NAME(mpi_pcontrol_)(int level, int *ierror)
+ {
+ int count;
+
+ MONITOR_DEBUG1("\n");
+ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, mpi_pcontrol_);
+- (*real_mpi_pcontrol)(level);
++ (*real_mpi_pcontrol)(level, ierror);
+ }
+--- libmonitor-20130218/src/mpi_pcontrol_f2.c 2013-02-18 11:34:17.000000000 -0700
++++ libmonitor-20130218-fixed/src/mpi_pcontrol_f2.c 2013-04-11 10:14:19.000960000 -0600
+@@ -7,18 +7,18 @@
+ #include "common.h"
+ #include "monitor.h"
+
+-typedef void mpi_pcontrol_fcn_t(int level);
++typedef void mpi_pcontrol_fcn_t(int level, int *ierror);
+ #ifdef MONITOR_STATIC
+ extern mpi_pcontrol_fcn_t __real_mpi_pcontrol__;
+ #endif
+ static mpi_pcontrol_fcn_t *real_mpi_pcontrol = NULL;
+
+ int
+-MONITOR_WRAP_NAME(mpi_pcontrol__)(int level)
++MONITOR_WRAP_NAME(mpi_pcontrol__)(int level, int *ierror)
+ {
+ int count;
+
+ MONITOR_DEBUG1("\n");
+ MONITOR_GET_REAL_NAME_WRAP(real_mpi_pcontrol, mpi_pcontrol__);
+- (*real_mpi_pcontrol)(level);
++ (*real_mpi_pcontrol)(level, ierror);
+ }
diff --git a/var/spack/packages/libmonitor/package.py b/var/spack/packages/libmonitor/package.py
index 3b95b86ddf..eecf1963e3 100644
--- a/var/spack/packages/libmonitor/package.py
+++ b/var/spack/packages/libmonitor/package.py
@@ -6,7 +6,7 @@
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
-# For details, see https://scalability-llnl.github.io/spack
+# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
@@ -29,6 +29,13 @@ class Libmonitor(Package):
homepage = "http://hpctoolkit.org"
version('20130218', svn='http://libmonitor.googlecode.com/svn/trunk/', revision=146)
+ variant('krellpatch', default=False, description="build with openspeedshop based patch.")
+
+
+ patch('libmonitorkrell-0000.patch', when='@20130218+krellpatch')
+ patch('libmonitorkrell-0001.patch', when='@20130218+krellpatch')
+ patch('libmonitorkrell-0002.patch', when='@20130218+krellpatch')
+
def install(self, spec, prefix):
configure("--prefix=" + prefix)