mpb-1.5/0000755000175400001440000000000012315341511007132 500000000000000mpb-1.5/tests/0000755000175400001440000000000012315341510010273 500000000000000mpb-1.5/tests/Makefile.am0000644000175400001440000000223312315326046012256 00000000000000noinst_PROGRAMS = malloctest blastest eigs_test maxwell_test normal_vectors EXTRA_DIST = blastest.real.out blastest.complex.out LIBMPB = $(top_builddir)/src/libmpb@MPB_SUFFIX@.la AM_CPPFLAGS = -I$(top_srcdir)/src/util -I$(top_srcdir)/src/matrices -I$(top_srcdir)/src/maxwell malloctest_SOURCES = malloctest.c malloctest_LDADD = $(LIBMPB) blastest_SOURCES = blastest.c blastest_LDADD = $(LIBMPB) eigs_test_SOURCES = eigs_test.c eigs_test_LDADD = $(LIBMPB) maxwell_test_SOURCES = maxwell_test.c maxwell_test_LDADD = $(LIBMPB) normal_vectors_SOURCES = normal_vectors.c normal_vectors_LDADD = -lctlgeom $(LIBMPB) blastest.out: blastest ./blastest | sed 's/\-0\.000\([ ,)]\)/ 0.000\1/g' | sed 's/\-0\.000$$/ 0.000/g' > $@ diff $(srcdir)/blastest.@SCALAR_TYPE@.out $@ maxwell_test.out: maxwell_test ./maxwell_test -1 -c 1e-9 -x 256 -E 1e-3 > $@ if !MPI MAXWELL_TEST_OUT=maxwell_test.out endif check-local: blastest.out $(MAXWELL_TEST_OUT) @echo "**********************************************************" @echo " PASSED tests." @echo "**********************************************************" clean-local: rm -f blastest.out maxwell_test.out mpb-1.5/tests/malloctest.c0000644000175400001440000000434712315341423012541 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #define NUM_POINTERS 1000 #define MAX_SIZE 65536 #define NUM_MALLOCS 3000000 int main(void) { char *pointers[NUM_POINTERS]; int i, iter; clock_t start_time; double elapsed_time; #ifdef DEBUG_MALLOC printf("Using debug_malloc and debug_free routines.\n"); #else fprintf(stderr, "***** NOTE: malloctest is designed to be run when the package\n" " is configured with --enable-debug, to test the\n" " debugging malloc/free routines.\n"); #endif srand(time(NULL)); for (i = 0; i < NUM_POINTERS; ++i) pointers[i] = NULL; printf("Doing %d malloc/free calls...\n", NUM_MALLOCS); start_time = clock(); for (iter = 0; iter < NUM_MALLOCS; ++iter) { i = rand() % NUM_POINTERS; if (pointers[i]) free(pointers[i]); CHK_MALLOC(pointers[i], char, rand() % MAX_SIZE + 1); if ((iter + 1) % (NUM_MALLOCS / 20) == 0) printf("...completed %d...\n", iter + 1); } elapsed_time = (clock() - start_time) * 1.0 / CLOCKS_PER_SEC; printf("Done.\n"); printf("Total time = %g seconds, %g us per iteration\n", elapsed_time, elapsed_time * 1e6 / NUM_MALLOCS); for (i = 0; i < NUM_POINTERS; ++i) if (pointers[i]) free(pointers[i]); #ifdef DEBUG_MALLOC debug_check_memory_leaks(); #endif printf("Okay.\n"); return EXIT_SUCCESS; } mpb-1.5/tests/maxwell_test.c0000644000175400001440000004013412315341423013074 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include #include "config.h" #include #include #include #include #include #if defined(DEBUG) && defined(HAVE_FEENABLEEXCEPT) # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include # if !HAVE_DECL_FEENABLEEXCEPT int feenableexcept (int EXCEPTS); # endif #endif #if defined(HAVE_GETOPT_H) # include #endif #if defined(HAVE_UNISTD_H) # include #endif #define NX 32 #define NY 1 #define NZ 1 #define NUM_BANDS 8 #define NUM_FFT_BANDS 5 #define NWORK 3 #define KX 0.5 #define EPS_LOW 1.00 #define EPS_HIGH 9.00 #define EPS_HIGH_X 0.25 #define ERROR_TOL 1e-4 #ifdef ENABLE_PROF # define PROF_ITERS 10 #else # define PROF_ITERS 1 #endif #define MESH_SIZE 7 /*************************************************************************/ typedef struct { real eps_high, eps_low, eps_high_x; } epsilon_data; #define INVERSION_SYM 1 static void epsilon(symmetric_matrix *eps, symmetric_matrix *eps_inv, const real r[3], void *edata_v) { epsilon_data *edata = (epsilon_data *) edata_v; real eps_val; #if INVERSION_SYM if (fabs(r[0]) < 0.5*edata->eps_high_x || fabs(r[0]-1.0) < 0.5*edata->eps_high_x) eps_val = edata->eps_high; #else if ((r[0] < edata->eps_high_x && r[0] >= 0.0) || (r[0] >= 1.0 && r[0] - 1.0 < edata->eps_high_x)) eps_val = edata->eps_high; #endif else eps_val = edata->eps_low; eps->m00 = eps->m11 = eps->m22 = eps_val; eps_inv->m00 = eps_inv->m11 = eps_inv->m22 = 1.0 / eps_val; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_ZERO(eps->m01); CASSIGN_ZERO(eps->m02); CASSIGN_ZERO(eps->m12); CASSIGN_ZERO(eps_inv->m01); CASSIGN_ZERO(eps_inv->m02); CASSIGN_ZERO(eps_inv->m12); #else eps->m01 = eps->m02 = eps->m12 = 0.0; eps_inv->m01 = eps_inv->m02 = eps_inv->m12 = 0.0; #endif } /*************************************************************************/ /* routines for analytic calculation of Bragg bands: */ static const double TWOPI = 6.2831853071795864769252867665590057683943388; /* We have an analytic expression for k as a function of omega for Bragg mirrors. This will have to be numerically inverted to find omega as a function of k. n1 and n2 are the indices of the two dielectrics, and f1 and f2 are their thicknesses as a fraction of the lattice constant (we should have f1 + f2 == 1). */ real analytic_bragg_k(real omega, real n1, real f1, real n2, real f2) { real phase1, phase2, c1, s1, c2, s2, b; CHECK(fabs(f1 + f2 - 1) < 1e-6, "invalid params to analytic_bragg_k"); phase1 = TWOPI * n1 * f1 * omega; phase2 = TWOPI * n2 * f2 * omega; c1 = cos(phase1); s1 = sin(phase1); c2 = cos(phase2); s2 = sin(phase2); b = c1*c2 - 0.5 * (n1/n2 + n2/n1) * s1*s2; if (fabs(b) > 1) return (-1.0); return fabs(atan2(sqrt(1-b*b), b) / TWOPI); } /* Solve for Bragg omega for the given k and other parameters, using omega_guess as a starting guess. We can't do anything clever like Newton's method or even an ordinary bisection search because there are regions of omega in which analytic_bragg_k is not defined (i.e. in the band gap). */ real bragg_omega(real omega_guess, real k, real n1, real f1, real n2, real f2, real tolerance) { real omega_guess_low = omega_guess - 0.2, omega_guess_high = omega_guess + 0.2; real k_cur; real k_best = -1.0, omega_best = 0.0; real tol; if (omega_guess_low < 0.0) omega_guess_low = 0.0; for (tol = (omega_guess_high - omega_guess_low) / 10.0; tol > tolerance; tol *= 0.25) { for (omega_guess = omega_guess_low + tol; omega_guess < omega_guess_high; omega_guess += tol) { k_cur = analytic_bragg_k(omega_guess, n1, f1, n2, f2); if (fabs(k_cur - k) < fabs(k_best - k)) { k_best = k_cur; omega_best = omega_guess; } } CHECK(k_best > 0.0, "No valid omega values in guess range!"); omega_guess_low = omega_best - tol; omega_guess_high = omega_best + tol; } return omega_best; } /*************************************************************************/ real norm_diff(scalar *a, scalar *b, int n) { real bmag = 0.0, diffmag = 0.0; int i; for (i = 0; i < n; ++i) { scalar d; ASSIGN_SCALAR(d, SCALAR_RE(b[i]) - SCALAR_RE(a[i]), SCALAR_IM(b[i]) - SCALAR_IM(a[i])); bmag += SCALAR_NORMSQR(b[i]); diffmag += SCALAR_NORMSQR(d); } return sqrt(diffmag / bmag); } /*************************************************************************/ void usage(void) { printf("Syntax: maxwell_test [options]\n" "Options:\n" " -h Print this help\n" " -s Set random seed\n" " -k Set kx wavevector component [dflt. = %f]\n" " -b Compute n bands [default = %d]\n" " -n Specify high-dielectric index [dflt. = %f]\n" " -f Specify high-index fill fraction [dflt. = %f]\n" " -x Use nx points in x direction [dflt. = %d]\n" " -y Use ny points in y direction [dflt. = %d]\n" " -z Use nz points in z direction [dflt. = %d]\n" " -e Solve for TE polarization only.\n" " -m Solve for TM polarization only.\n" " -t Set target frequency [dflt. none].\n" " -c Set convergence tolerance [dflt. %e].\n" " -g Set mesh size [dflt. %d].\n" " -1 Stop after first computation.\n" " -p Use simple preconditioner.\n" " -E Exit with error if the error exceeds \n" " -v Verbose output.\n", KX, NUM_BANDS, sqrt(EPS_HIGH), EPS_HIGH_X, NX, NY, NZ, ERROR_TOL, MESH_SIZE); } /*************************************************************************/ int main(int argc, char **argv) { maxwell_data *mdata; maxwell_target_data *mtdata = NULL; int local_N, N_start, alloc_N; real R[3][3] = { {1,0,0}, {0,0.01,0}, {0,0,0.01} }; real G[3][3] = { {1,0,0}, {0,100,0}, {0,0,100} }; real kvector[3] = {KX,0,0}; evectmatrix H, Hstart, W[NWORK]; real *eigvals; int i, iters; int num_iters; int parity = NO_PARITY; int nx = NX, ny = NY, nz = NZ; int num_bands = NUM_BANDS; real target_freq = 0.0; int do_target = 0; evectoperator op; evectpreconditioner pre_op; void *op_data, *pre_op_data; real error_tol = ERROR_TOL; int mesh_size = MESH_SIZE, mesh[3]; epsilon_data ed; int stop1 = 0; int verbose = 0; int which_preconditioner = 2; double max_err = 1e20; srand(time(NULL)); #if defined(DEBUG) && defined(HAVE_FEENABLEEXCEPT) feenableexcept(FE_INVALID | FE_OVERFLOW); /* crash on NaN/overflow */ #endif ed.eps_high = EPS_HIGH; ed.eps_low = EPS_LOW; ed.eps_high_x = EPS_HIGH_X; #ifdef HAVE_GETOPT { extern char *optarg; extern int optind; int c; while ((c = getopt(argc, argv, "hs:k:b:n:f:x:y:z:emt:c:g:1pvE:")) != -1) switch (c) { case 'h': usage(); exit(EXIT_SUCCESS); break; case 's': srand(atoi(optarg)); break; case 'k': kvector[0] = atof(optarg); break; case 'b': num_bands = atoi(optarg); CHECK(num_bands > 0, "num_bands must be positive"); break; case 'n': ed.eps_high = atof(optarg); CHECK(ed.eps_high > 0.0, "index must be positive"); ed.eps_high = ed.eps_high * ed.eps_high; break; case 'f': ed.eps_high_x = atof(optarg); CHECK(ed.eps_high_x > 0.0, "fill must be positive"); break; case 'x': nx = atoi(optarg); CHECK(nx > 0, "x size must be positive"); break; case 'y': ny = atoi(optarg); CHECK(ny > 0, "y size must be positive"); break; case 'z': nz = atoi(optarg); CHECK(nz > 0, "z size must be positive"); break; case 'e': parity = EVEN_Z_PARITY; break; case 'm': parity = ODD_Z_PARITY; break; case 't': target_freq = fabs(atof(optarg)); do_target = 1; break; case 'E': max_err = fabs(atof(optarg)); CHECK(max_err > 0, "maximum error must be positive"); break; case 'c': error_tol = fabs(atof(optarg)); break; case 'g': mesh_size = atoi(optarg); CHECK(mesh_size > 0, "mesh size must be positive"); break; case '1': stop1 = 1; break; case 'p': which_preconditioner = 1; break; case 'v': verbose = 1; break; default: usage(); exit(EXIT_FAILURE); } if (argc != optind) { usage(); exit(EXIT_FAILURE); } } #endif #ifdef ENABLE_PROF stop1 = 1; #endif mesh[0] = mesh[1] = mesh[2] = mesh_size; printf("Creating Maxwell data...\n"); mdata = create_maxwell_data(nx, ny, nz, &local_N, &N_start, &alloc_N, num_bands, NUM_FFT_BANDS); CHECK(mdata, "NULL mdata"); set_maxwell_data_parity(mdata, parity); printf("Setting k vector to (%g, %g, %g)...\n", kvector[0], kvector[1], kvector[2]); update_maxwell_data_k(mdata, kvector, G[0], G[1], G[2]); printf("Initializing dielectric...\n"); /* set up dielectric function (a simple Bragg mirror) */ set_maxwell_dielectric(mdata, mesh, R, G, epsilon, 0, &ed); if (verbose && ny == 1 && nz == 1) { printf("dielectric function:\n"); for (i = 0; i < nx; ++i) { if (mdata->eps_inv[i].m00 == mdata->eps_inv[i].m11) printf(" eps(%g) = %g\n", i * 1.0 / nx, 1.0/mdata->eps_inv[i].m00); else printf(" eps(%g) = x: %g OR y: %g\n", i * 1.0 / nx, 1.0/mdata->eps_inv[i].m00, 1.0/mdata->eps_inv[i].m11); } printf("\n"); } printf("Allocating fields...\n"); H = create_evectmatrix(nx * ny * nz, 2, num_bands, local_N, N_start, alloc_N); Hstart = create_evectmatrix(nx * ny * nz, 2, num_bands, local_N, N_start, alloc_N); for (i = 0; i < NWORK; ++i) W[i] = create_evectmatrix(nx * ny * nz, 2, num_bands, local_N, N_start, alloc_N); CHK_MALLOC(eigvals, real, num_bands); for (iters = 0; iters < PROF_ITERS; ++iters) { printf("Initializing fields...\n"); for (i = 0; i < H.n * H.p; ++i) ASSIGN_REAL(Hstart.data[i], rand() * 1.0 / RAND_MAX); /*****************************************/ if (do_target) { printf("\nSolving for eigenvectors close to %f...\n", target_freq); mtdata = create_maxwell_target_data(mdata, target_freq); op = maxwell_target_operator; if (which_preconditioner == 1) pre_op = maxwell_target_preconditioner; else pre_op = maxwell_target_preconditioner2; op_data = (void *) mtdata; pre_op_data = (void *) mtdata; } else { op = maxwell_operator; if (which_preconditioner == 1) pre_op = maxwell_preconditioner; else pre_op = maxwell_preconditioner2; op_data = (void *) mdata; pre_op_data = (void *) mdata; } /*****************************************/ printf("\nSolving for eigenvectors with preconditioning...\n"); evectmatrix_copy(H, Hstart); eigensolver(H, eigvals, op, op_data, pre_op, pre_op_data, maxwell_parity_constraint, (void *) mdata, W, NWORK, error_tol, &num_iters, EIGS_DEFAULT_FLAGS); if (do_target) eigensolver_get_eigenvals(H, eigvals, maxwell_operator, mdata, W[0], W[1]); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("%15s%15s%15s%15s\n","eigenval", "frequency", "exact freq.", "error"); for (i = 0; i < num_bands; ++i) { double err; real freq = sqrt(eigvals[i]); real exact_freq = bragg_omega(freq, kvector[0], sqrt(ed.eps_high), ed.eps_high_x, sqrt(ed.eps_low), 1.0 - ed.eps_high_x, 1.0e-7); printf("%15f%15f%15f%15e\n", eigvals[i], freq, exact_freq, err = fabs(freq - exact_freq) / exact_freq); CHECK(err <= max_err, "error exceeds tolerance"); } printf("\n"); } if (!stop1) { /*****************************************/ printf("\nSolving for eigenvectors without preconditioning...\n"); evectmatrix_copy(H, Hstart); eigensolver(H, eigvals, op, op_data, NULL, NULL, maxwell_parity_constraint, (void *) mdata, W, NWORK, error_tol, &num_iters, EIGS_DEFAULT_FLAGS); if (do_target) eigensolver_get_eigenvals(H, eigvals, maxwell_operator, mdata, W[0], W[1]); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("%15s%15s%15s%15s\n","eigenval", "frequency", "exact freq.", "error"); for (i = 0; i < num_bands; ++i) { double err; real freq = sqrt(eigvals[i]); real exact_freq = bragg_omega(freq, kvector[0], sqrt(ed.eps_high), ed.eps_high_x, sqrt(ed.eps_low), 1.0 - ed.eps_high_x, 1.0e-7); printf("%15f%15f%15f%15e\n", eigvals[i], freq, exact_freq, err = fabs(freq - exact_freq) / exact_freq); CHECK(err <= max_err, "error exceeds tolerance"); } printf("\n"); /*****************************************/ printf("\nSolving for eigenvectors without conj. grad...\n"); evectmatrix_copy(H, Hstart); eigensolver(H, eigvals, op, op_data, pre_op, pre_op_data, maxwell_parity_constraint, (void *) mdata, W, NWORK - 1, error_tol, &num_iters, EIGS_DEFAULT_FLAGS); if (do_target) eigensolver_get_eigenvals(H, eigvals, maxwell_operator, mdata, W[0], W[1]); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("%15s%15s%15s%15s\n","eigenval", "frequency", "exact freq.", "error"); for (i = 0; i < num_bands; ++i) { double err; real freq = sqrt(eigvals[i]); real exact_freq = bragg_omega(freq, kvector[0], sqrt(ed.eps_high), ed.eps_high_x, sqrt(ed.eps_low), 1.0 - ed.eps_high_x, 1.0e-7); printf("%15f%15f%15f%15e\n", eigvals[i], freq, exact_freq, err = fabs(freq - exact_freq) / exact_freq); CHECK(err <= max_err, "error exceeds tolerance"); } printf("\n"); /*****************************************/ printf("\nSolving for eigenvectors without precond. or conj. grad...\n"); evectmatrix_copy(H, Hstart); eigensolver(H, eigvals, op, op_data, NULL, NULL, maxwell_parity_constraint, (void *) mdata, W, NWORK - 1, error_tol, &num_iters, EIGS_DEFAULT_FLAGS); if (do_target) eigensolver_get_eigenvals(H, eigvals, maxwell_operator, mdata, W[0], W[1]); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("%15s%15s%15s%15s\n","eigenval", "frequency", "exact freq.", "error"); for (i = 0; i < num_bands; ++i) { double err; real freq = sqrt(eigvals[i]); real exact_freq = bragg_omega(freq, kvector[0], sqrt(ed.eps_high), ed.eps_high_x, sqrt(ed.eps_low), 1.0 - ed.eps_high_x, 1.0e-7); printf("%15f%15f%15f%15e\n", eigvals[i], freq, exact_freq, err = fabs(freq - exact_freq) / exact_freq); CHECK(err <= max_err, "error exceeds tolerance"); } printf("\n"); /*****************************************/ } destroy_evectmatrix(H); destroy_evectmatrix(Hstart); for (i = 0; i < NWORK; ++i) destroy_evectmatrix(W[i]); destroy_maxwell_target_data(mtdata); destroy_maxwell_data(mdata); free(eigvals); debug_check_memory_leaks(); return EXIT_SUCCESS; } mpb-1.5/tests/eigs_test.c0000644000175400001440000002453312315341423012357 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include #include "config.h" #include #include #include #include static sqmatrix A, Ainv; #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) extern void Aop(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work); extern void Ainvop(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); extern void Cop(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); extern void printmat(scalar *A, int m, int n, int ldn); extern void printmat_matlab(scalar *A, int m, int n); extern void debug_check_memory_leaks(void); real norm_diff(scalar *a, scalar *b, int n) { real bmag = 0.0, diffmag = 0.0; int i; for (i = 0; i < n; ++i) { scalar d; ASSIGN_SCALAR(d, SCALAR_RE(b[i]) - SCALAR_RE(a[i]), SCALAR_IM(b[i]) - SCALAR_IM(a[i])); bmag += SCALAR_NORMSQR(b[i]); diffmag += SCALAR_NORMSQR(d); } return sqrt(diffmag / bmag); } #define NWORK 3 int main(int argc, char **argv) { int i, j, n = 0, p; sqmatrix X, U, YtY; evectmatrix Y, Y2, Ystart, W[NWORK]; real *eigvals, *eigvals_dense, sum = 0.0; int num_iters; if (argc >= 2) n = atoi(argv[1]); srand(argc >= 3 ? atoi(argv[2]) : time(NULL)); CHECK(n > 0, "illegal argument\nSyntax: eigs_test []"); X = create_sqmatrix(n); A = create_sqmatrix(n); Ainv = create_sqmatrix(n); U = create_sqmatrix(n); /* fill X with random data */ for (i = 0; i < n*n; ++i) ASSIGN_SCALAR(X.data[i], rand() * 1.0 / RAND_MAX, rand() * 1.0 / RAND_MAX); /* assign A = adjoint(X) * X to get a Hermitian matrix: */ sqmatrix_AeBC(A, X, 1, X, 0); /* increase diagonal elements of A so that our preconditioner has a chance of being useful: */ for (i = 0; i < n; ++i) ASSIGN_SCALAR(A.data[i * n + i], n * SCALAR_RE(A.data[i * n + i]), n * SCALAR_IM(A.data[i * n + i])); sqmatrix_copy(U, A); sqmatrix_copy(Ainv, A); sqmatrix_invert(Ainv, 1, X); if (n <= 10) { printf("Solving for eigenvalues of %d x %d matrix: \nA = ", n, n); printmat_matlab(A.data, n, n); } CHK_MALLOC(eigvals_dense, real, n); sqmatrix_eigensolve(U, eigvals_dense, X); /* The eigenvectors are actually the columns of U'. Assign U = U': */ for (i = 0; i < n; ++i) for (j = i + 1; j < n; ++j) { scalar dummy; dummy = U.data[i*n + j]; U.data[i*n + j] = U.data[j*n + i]; U.data[j*n + i] = dummy; } for (i = 0; i < n * n; ++i) ASSIGN_CONJ(U.data[i], U.data[i]); p = MIN(MIN(5, MAX(n/4, 2)), n); printf("\nSolving for %d eigenvals out of %d.\n", p, n); printf("\nSolved A by dense eigensolver.\nEigenvalues = "); for (sum = 0.0, i = 0; i < p; ++i) { sum += eigvals_dense[i]; printf(" %f", eigvals_dense[i]); } printf("\nEigenvalue sum = %f\n", sum); printf("\nEigenvectors are (by column): \n"); printmat(U.data, n, p, n); YtY = create_sqmatrix(p); Y = create_evectmatrix(n, 1, p, n, 0, n); Y2 = create_evectmatrix(n, 1, p, n, 0, n); Ystart = create_evectmatrix(n, 1, p, n, 0, n); for (i = 0; i < NWORK; ++i) W[i] = create_evectmatrix(n, 1, p, n, 0, n); CHK_MALLOC(eigvals, real, p); for (i = 0; i < n*p; ++i) ASSIGN_REAL(Ystart.data[i], rand() * 1.0 / RAND_MAX); /* Check inverse Ainvop: */ Aop(Ystart, Y, NULL, 0, Y2); Ainvop(Y, Y2, NULL, Ystart, NULL, U); printf("\nDifference |Y - (1/A)*A*Y| / |Y| = %g\n", norm_diff(Ystart.data, Y2.data, Y.n * Y.p)); evectmatrix_copy(Y, Ystart); eigensolver(Y, eigvals, Aop, NULL, Cop, NULL, NULL, NULL, W, NWORK, 1e-10,&num_iters, EIGS_DEFAULT_FLAGS); printf("\nSolved for eigenvectors after %d iterations.\n", num_iters); printf("\nEigenvalues = "); for (sum = 0.0, i = 0; i < p; ++i) { sum += eigvals[i]; printf(" %f", eigvals[i]); } printf("\nEigenvalue sum = %f\n", sum); /* Change phase of eigenvectors to match those solved for previously: */ for (i = 0; i < p; ++i) { scalar phase; ASSIGN_DIV(phase, U.data[i], Y.data[i]); for (j = 0; j < n; ++j) { ASSIGN_MULT(Y.data[j*p + i], Y.data[j*p + i], phase); } } printf("Eigenvectors are (by column): \n"); printmat(Y.data, n, p, p); evectmatrix_XtX(YtY, Y, U); printf("adjoint(Y) * Y:\n"); printmat(YtY.data, p, p, p); printf("\nSolving with exact inverse preconditioner...\n"); evectmatrix_copy(Y, Ystart); eigensolver(Y, eigvals, Aop, NULL, Ainvop, NULL, NULL, NULL, W, NWORK, 1e-10, &num_iters, EIGS_DEFAULT_FLAGS); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("\nEigenvalues = "); for (sum = 0.0, i = 0; i < p; ++i) { sum += eigvals[i]; printf(" %f", eigvals[i]); } printf("\nEigenvalue sum = %f\n", sum); printf("\nSolving without conjugate-gradient...\n"); evectmatrix_copy(Y, Ystart); eigensolver(Y, eigvals, Aop, NULL, Cop, NULL, NULL, NULL, W, NWORK - 1, 1e-10, &num_iters, EIGS_DEFAULT_FLAGS); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("\nEigenvalues = "); for (sum = 0.0, i = 0; i < p; ++i) { sum += eigvals[i]; printf(" %f", eigvals[i]); } printf("\nEigenvalue sum = %f\n", sum); printf("\nSolving without preconditioning...\n"); evectmatrix_copy(Y, Ystart); eigensolver(Y, eigvals, Aop, NULL, NULL, NULL, NULL, NULL, W, NWORK, 1e-10, &num_iters, EIGS_DEFAULT_FLAGS); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("\nEigenvalues = "); for (sum = 0.0, i = 0; i < p; ++i) { sum += eigvals[i]; printf(" %f", eigvals[i]); } printf("\nEigenvalue sum = %f\n", sum); printf("\nSolving without conjugate-gradient or preconditioning...\n"); evectmatrix_copy(Y, Ystart); eigensolver(Y, eigvals, Aop, NULL, NULL, NULL, NULL, NULL, W, NWORK - 1, 1e-10, &num_iters, EIGS_DEFAULT_FLAGS); printf("Solved for eigenvectors after %d iterations.\n", num_iters); printf("\nEigenvalues = "); for (sum = 0.0, i = 0; i < p; ++i) { sum += eigvals[i]; printf(" %f", eigvals[i]); } printf("\nEigenvalue sum = %f\n", sum); destroy_sqmatrix(A); destroy_sqmatrix(Ainv); destroy_sqmatrix(X); destroy_sqmatrix(U); destroy_sqmatrix(YtY); destroy_evectmatrix(Y); destroy_evectmatrix(Y2); destroy_evectmatrix(Ystart); for (i = 0; i < NWORK; ++i) destroy_evectmatrix(W[i]); free(eigvals); free(eigvals_dense); debug_check_memory_leaks(); return EXIT_SUCCESS; } void Aop(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work) { CHECK(A.p == Xin.n && A.p == Xout.n && Xin.p == Xout.p, "matrices not conformant"); blasglue_gemm('N', 'N', Xout.n, Xout.p, Xin.n, 1.0, A.data, A.p, Xin.data, Xin.p, 0.0, Xout.data, Xout.p); } void Ainvop(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { CHECK(Ainv.p == Xin.n && Ainv.p == Xout.n && Xin.p == Xout.p, "matrices not conformant"); blasglue_gemm('N', 'N', Xout.n, Xout.p, Xin.n, 1.0, Ainv.data, Ainv.p, Xin.data, Xin.p, 0.0, Xout.data, Xout.p); } void Cop_old(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { int in, ip; CHECK(A.p == Xin.n && A.p == Xout.n && Xin.p == Xout.p, "matrices not conformant"); evectmatrix_XeYS(Xout, Xin, YtY, 1); for (in = 0; in < Xout.n; ++in) { real diag; diag = SCALAR_NORMSQR(A.data[in * A.p + in]); diag = (diag == 0.0) ? 1.0 : 1.0 / sqrt(diag); for (ip = 0; ip < Xout.p; ++ip) { scalar xin = Xout.data[in * Xout.p + ip]; ASSIGN_SCALAR(Xout.data[in * Xout.p + ip], diag * SCALAR_RE(xin), diag * SCALAR_IM(xin)); } } } void Cop(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { int in, ip; CHECK(A.p == Xin.n && A.p == Xout.n && Xin.p == Xout.p, "matrices not conformant"); evectmatrix_XeYS(Xout, Xin, YtY, 1); for (in = 0; in < Xout.n; ++in) { scalar diag = A.data[in * A.p + in]; for (ip = 0; ip < Xout.p; ++ip) { scalar scale; if (eigenvals) { ASSIGN_SCALAR(scale, SCALAR_RE(diag) - 0*eigenvals[ip], SCALAR_IM(diag)); } else scale = diag; ASSIGN_DIV(Xout.data[in * Xout.p + ip], Xout.data[in * Xout.p + ip], scale); } } } void printmat(scalar *A, int m, int n, int ldn) { int i, j; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { #ifdef SCALAR_COMPLEX printf(" (%6.3f,%6.3f)", A[i*ldn + j].re, A[i*ldn + j].im); #else printf(" %6.3f", A[i*ldn + j]); #endif if (j > 7) { printf(" ..."); break; } } printf("\n"); if (i > 7) { printf(" ...\n"); break; } } } void printmat_matlab(scalar *A, int m, int n) { int i, j; printf("["); for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { #ifdef SCALAR_COMPLEX printf(" %g+%gi", A[i*n + j].re, A[i*n + j].im); #else printf(" %g", A[i*n + j]); #endif } printf(";\n"); } printf("]\n"); } mpb-1.5/tests/blastest.real.out0000644000175400001440000000264112315325412013515 00000000000000A = [ 3.3 6.2 7.1 9.1; -2.3 3.6 0.3 9.7; 6.7 -0.1 1.1 4.8; 8.4 7.7 5.9 -1.8; ] B = [ 1.1 2.2 3.3 4.4; 8.8 7.7 6.6 5.5; 6.1 8.2 9.7 3.6; 6.3 2.9 5.5 8.1; ] C = A * B 158.830 139.610 170.730 147.890 92.090 53.250 72.430 89.330 43.440 36.910 58.520 71.770 101.650 120.930 125.870 85.970 C * B 3376.441 3253.290 3915.041 3279.244 1574.501 1465.606 1849.233 1682.392 1181.715 1067.772 1349.337 1186.150 2485.417 2436.238 2827.357 2261.864 D = A' * A 131.630 76.190 79.670 24.760 76.190 110.700 90.420 77.000 79.670 90.420 86.520 62.180 24.760 77.000 62.180 203.180 inverse(D) 0.020 0.006 -0.027 0.004 0.006 0.067 -0.073 -0.004 -0.027 -0.073 0.116 -0.005 0.004 -0.004 -0.005 0.007 [v,d] = eig(D); diag(d) 5.781 35.665 149.952 340.633 v' 0.166 0.566 -0.807 0.013 0.662 -0.622 -0.295 0.297 0.589 0.159 0.220 -0.761 0.433 0.518 0.461 0.576 v * v' 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 sqrtm(D) 10.390 3.048 3.783 0.293 3.048 8.333 4.828 2.943 3.783 4.828 6.603 2.302 0.293 2.943 2.302 13.753 sqrtm(D) * sqrtm(D) 131.630 76.190 79.670 24.760 76.190 110.700 90.420 77.000 79.670 90.420 86.520 62.180 24.760 77.000 62.180 203.180 mpb-1.5/tests/blastest.complex.out0000644000175400001440000000544712315325412014250 00000000000000A = [ 3.3+6.2i 7.1+9.1i 2.3+8.2i -3.2+6.6i; -2.3+3.6i 0.3+9.7i 1.9+-4.9i 7.1+7.1i; 6.7+-0.1i 1.1+4.8i -9.7+3.7i -0.01+-0.2i; 8.4+7.7i 5.9+-1.8i 8.8+9.9i 0+0.1i; ] B = [ 1.1+2.2i 3.3+4.4i 1.2+2.3i 3.4+4.5i; 8.8+7.7i 6.6+5.5i 3.5+7.2i -0.3+6.1i; 6.1+8.2i 9.7+3.6i -5.1+6.1i 2.3+8.1i; 6.3+2.9i 5.5+8.1i 8.5+6.7i 9+2.4i; ] C = A * B (-110.110,250.010) (-97.850,232.290) (-184.140,104.870) (-180.090,165.720) (-6.590,137.580) (-57.190,123.300) (-46.850,179.640) ( 7.640,85.870) (-108.683, 7.081) (-102.435,66.669) ( 5.715,-39.797) (-58.270,-36.804) (30.290,189.720) (91.590,211.200) (-79.960,68.780) (-57.070,195.460) C * B (-6919.199,975.010) (-7883.329,1142.554) (-5063.800,-1300.820) (-6178.540,-503.102) (-3722.331,2056.288) (-3437.379,3032.270) (-2779.525,-251.145) (-3076.656,877.121) (-1449.081,-1030.123) (-1256.229,-1618.081) (-1020.338,-1211.081) (-877.937,-1626.178) (-3182.440,3668.914) (-4212.248,3649.090) (-3406.522,2136.486) (-3790.311,2409.382) D = A' * A (242.330, 0.000) (156.670,-65.660) (121.210,56.450) (40.313,-0.771) (156.670,65.660) (289.700, 0.000) (85.180,142.270) (107.189, 9.658) (121.210,-56.450) (85.180,-142.270) (383.380, 0.000) (25.807,92.557) (40.313, 0.771) (107.189,-9.658) (25.807,-92.557) (154.670, 0.000) inverse(D) ( 0.008, 0.000) (-0.006, 0.001) (-0.001, 0.002) ( 0.003, 0.001) (-0.006,-0.001) ( 0.018, 0.000) (-0.001,-0.010) (-0.017, 0.002) (-0.001,-0.002) (-0.001, 0.010) ( 0.010, 0.000) ( 0.000,-0.012) ( 0.003,-0.001) (-0.017,-0.002) ( 0.000, 0.012) ( 0.024, 0.000) [v,d] = eig(D); diag(d) 21.695 114.964 297.042 636.378 v' ( 0.167, 0.000) (-0.581,-0.074) (-0.005, 0.394) ( 0.688, 0.029) ( 0.829, 0.000) (-0.302, 0.197) (-0.172,-0.198) (-0.327, 0.086) ( 0.236, 0.000) ( 0.420,-0.151) (-0.582,-0.143) ( 0.381,-0.491) ( 0.479, 0.000) ( 0.518,-0.241) ( 0.584, 0.275) ( 0.139, 0.083) v * v' ( 1.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 1.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 1.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 0.000, 0.000) ( 1.000, 0.000) sqrtm(D) (14.249, 0.000) ( 4.839,-1.835) ( 3.176, 1.293) ( 0.852,-0.206) ( 4.839, 1.835) (14.680, 0.000) ( 2.138, 4.539) ( 4.715,-0.063) ( 3.176,-1.293) ( 2.138,-4.539) (18.171, 0.000) ( 0.469, 4.007) ( 0.852, 0.206) ( 4.715, 0.063) ( 0.469,-4.007) (10.742, 0.000) sqrtm(D) * sqrtm(D) (242.330, 0.000) (156.670,-65.660) (121.210,56.450) (40.313,-0.771) (156.670,65.660) (289.700, 0.000) (85.180,142.270) (107.189, 9.658) (121.210,-56.450) (85.180,-142.270) (383.380, 0.000) (25.807,92.557) (40.313, 0.771) (107.189,-9.658) (25.807,-92.557) (154.670, 0.000) mpb-1.5/tests/Makefile.in0000644000175400001440000005101412315337034012267 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = malloctest$(EXEEXT) blastest$(EXEEXT) \ eigs_test$(EXEEXT) maxwell_test$(EXEEXT) \ normal_vectors$(EXEEXT) subdir = tests DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_blastest_OBJECTS = blastest.$(OBJEXT) blastest_OBJECTS = $(am_blastest_OBJECTS) blastest_DEPENDENCIES = $(LIBMPB) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_eigs_test_OBJECTS = eigs_test.$(OBJEXT) eigs_test_OBJECTS = $(am_eigs_test_OBJECTS) eigs_test_DEPENDENCIES = $(LIBMPB) am_malloctest_OBJECTS = malloctest.$(OBJEXT) malloctest_OBJECTS = $(am_malloctest_OBJECTS) malloctest_DEPENDENCIES = $(LIBMPB) am_maxwell_test_OBJECTS = maxwell_test.$(OBJEXT) maxwell_test_OBJECTS = $(am_maxwell_test_OBJECTS) maxwell_test_DEPENDENCIES = $(LIBMPB) am_normal_vectors_OBJECTS = normal_vectors.$(OBJEXT) normal_vectors_OBJECTS = $(am_normal_vectors_OBJECTS) normal_vectors_DEPENDENCIES = $(LIBMPB) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(blastest_SOURCES) $(eigs_test_SOURCES) \ $(malloctest_SOURCES) $(maxwell_test_SOURCES) \ $(normal_vectors_SOURCES) DIST_SOURCES = $(blastest_SOURCES) $(eigs_test_SOURCES) \ $(malloctest_SOURCES) $(maxwell_test_SOURCES) \ $(normal_vectors_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = blastest.real.out blastest.complex.out LIBMPB = $(top_builddir)/src/libmpb@MPB_SUFFIX@.la AM_CPPFLAGS = -I$(top_srcdir)/src/util -I$(top_srcdir)/src/matrices -I$(top_srcdir)/src/maxwell malloctest_SOURCES = malloctest.c malloctest_LDADD = $(LIBMPB) blastest_SOURCES = blastest.c blastest_LDADD = $(LIBMPB) eigs_test_SOURCES = eigs_test.c eigs_test_LDADD = $(LIBMPB) maxwell_test_SOURCES = maxwell_test.c maxwell_test_LDADD = $(LIBMPB) normal_vectors_SOURCES = normal_vectors.c normal_vectors_LDADD = -lctlgeom $(LIBMPB) @MPI_FALSE@MAXWELL_TEST_OUT = maxwell_test.out all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list blastest$(EXEEXT): $(blastest_OBJECTS) $(blastest_DEPENDENCIES) $(EXTRA_blastest_DEPENDENCIES) @rm -f blastest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blastest_OBJECTS) $(blastest_LDADD) $(LIBS) eigs_test$(EXEEXT): $(eigs_test_OBJECTS) $(eigs_test_DEPENDENCIES) $(EXTRA_eigs_test_DEPENDENCIES) @rm -f eigs_test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(eigs_test_OBJECTS) $(eigs_test_LDADD) $(LIBS) malloctest$(EXEEXT): $(malloctest_OBJECTS) $(malloctest_DEPENDENCIES) $(EXTRA_malloctest_DEPENDENCIES) @rm -f malloctest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(malloctest_OBJECTS) $(malloctest_LDADD) $(LIBS) maxwell_test$(EXEEXT): $(maxwell_test_OBJECTS) $(maxwell_test_DEPENDENCIES) $(EXTRA_maxwell_test_DEPENDENCIES) @rm -f maxwell_test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(maxwell_test_OBJECTS) $(maxwell_test_LDADD) $(LIBS) normal_vectors$(EXEEXT): $(normal_vectors_OBJECTS) $(normal_vectors_DEPENDENCIES) $(EXTRA_normal_vectors_DEPENDENCIES) @rm -f normal_vectors$(EXEEXT) $(AM_V_CCLD)$(LINK) $(normal_vectors_OBJECTS) $(normal_vectors_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blastest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eigs_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloctest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxwell_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal_vectors.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir 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 \ 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 blastest.out: blastest ./blastest | sed 's/\-0\.000\([ ,)]\)/ 0.000\1/g' | sed 's/\-0\.000$$/ 0.000/g' > $@ diff $(srcdir)/blastest.@SCALAR_TYPE@.out $@ maxwell_test.out: maxwell_test ./maxwell_test -1 -c 1e-9 -x 256 -E 1e-3 > $@ check-local: blastest.out $(MAXWELL_TEST_OUT) @echo "**********************************************************" @echo " PASSED tests." @echo "**********************************************************" clean-local: rm -f blastest.out maxwell_test.out # 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: mpb-1.5/tests/blastest.c0000644000175400001440000001206512315341423012207 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include extern void debug_check_memory_leaks(void); void printmat(scalar *A, int m, int n) { int i, j; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { #ifdef SCALAR_COMPLEX printf(" (%6.3f,%6.3f)", (double)A[i*n + j].re, (double)A[i*n + j].im); #else printf(" %6.3f", (double)A[i*n + j]); #endif } printf("\n"); } } void printmat_matlab(scalar *A, int m, int n) { int i, j; printf("["); for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { #ifdef SCALAR_COMPLEX printf(" %g+%gi", (double)A[i*n + j].re, (double)A[i*n + j].im); #else printf(" %g", (double)A[i*n + j]); #endif } printf(";\n"); } printf("]\n"); } int main(void) { const int N = 4; int i,j; #ifndef SCALAR_COMPLEX scalar A[] = { 3.3, 6.2, 7.1, 9.1, -2.3, 3.6, 0.3, 9.7, 6.7, -0.1, 1.1, 4.8, 8.4, 7.7, 5.9, -1.8 }; scalar B[] = { 1.1, 2.2, 3.3, 4.4, 8.8, 7.7, 6.6, 5.5, 6.1, 8.2, 9.7, 3.6, 6.3, 2.9, 5.5, 8.1 }; #else scalar A[] = { {3.3, 6.2} , {7.1, 9.1}, {2.3, 8.2}, {-3.2, 6.6}, {-2.3, 3.6}, {0.3, 9.7}, {1.9,-4.9}, {7.1, 7.1}, {6.7, -0.1}, {1.1, 4.8}, {-9.7, 3.7}, {-0.01, -0.2}, {8.4, 7.7}, {5.9, -1.8}, {8.8, 9.9}, {0.0, 0.1} }; scalar B[] = { {1.1, 2.2}, {3.3, 4.4}, {1.2, 2.3}, {3.4, 4.5}, {8.8, 7.7}, {6.6, 5.5}, {3.5, 7.2}, {-0.3, 6.1}, {6.1, 8.2}, {9.7, 3.6}, {-5.1, 6.1}, {2.3, 8.1}, {6.3, 2.9}, {5.5, 8.1}, {8.5, 6.7}, {9.0, 2.4} }; #endif scalar C[16], D[16], E[16]; real eigvals[4], wrk[20]; printf("A = "); printmat_matlab(A,N,N); printf("B = "); printmat_matlab(B,N,N); blasglue_gemm('N', 'N', N, N, N, 1.0, A, N, B, N, 0.0, C, N); printf("\nC = A * B\n"); printmat(C,N,N); blasglue_gemm('N', 'N', N, N, N, 1.0, C, N, B, N, 0.0, D, N); printf("\nC * B\n"); printmat(D,N,N); blasglue_herk('U', 'C', N, N, 1.0, A, N, 0.0, D, N); /* Now, copy the conjugate of the upper half onto the lower half of D */ for (i = 0; i < N; ++i) for (j = i + 1; j < N; ++j) { ASSIGN_CONJ(D[j * N + i], D[i * N + j]); } printf("\nD = A' * A\n"); printmat(D,N,N); lapackglue_potrf('U', N, D, N); lapackglue_potri('U', N, D, N); /* Now, copy the conjugate of the upper half onto the lower half of D */ for (i = 0; i < N; ++i) for (j = i + 1; j < N; ++j) { ASSIGN_CONJ(D[j * N + i], D[i * N + j]); } printf("\ninverse(D)\n"); printmat(D,N,N); /* D = At * A, again */ blasglue_herk('U', 'C', N, N, 1.0, A, N, 0.0, D, N); /* Compute eigenvectors and eigenvalues: */ lapackglue_heev('V', 'U', N, D, N, eigvals, E, 16, wrk); /* Choose a deterministic phase for each row/eigenvector: */ for (i = 0; i < N; ++i) { scalar phase; real len; for (j = 0; (len = sqrt(SCALAR_NORMSQR(D[i*N + j]))) < 1e-6; ++j) ; /* phase to make D[i*N+j] purely real: */ ASSIGN_SCALAR(phase, SCALAR_RE(D[i*N+j])/len, -SCALAR_IM(D[i*N+j])/len); ASSIGN_MULT(D[i*N+j], D[i*N+j], phase); if (SCALAR_RE(D[i*N+j]) < 0) { /* pick deterministic (positive) sign */ ASSIGN_SCALAR(phase, -SCALAR_RE(phase), -SCALAR_IM(phase)); ASSIGN_SCALAR(D[i*N+j], -SCALAR_RE(D[i*N+j]),-SCALAR_IM(D[i*N+j])); } for (j = j + 1; j < N; ++j) ASSIGN_MULT(D[i*N + j], D[i*N + j], phase); } printf("\n[v,d] = eig(D);\n"); printf("\ndiag(d)\n "); for (i = 0; i < 4; ++i) printf(" %6.3f", (double)eigvals[i]); printf("\nv'\n"); printmat(D,N,N); blasglue_gemm('C', 'N', N, N, N, 1.0, D, N, D, N, 0.0, C, N); printf("\nv * v'\n"); printmat(C,N,N); /* Compute E = diag(sqrt(eigenvals)) * D; i.e. the rows of E become the rows of D times sqrt(corresponding eigenvalue) */ for (i = 0; i < N; ++i) { CHECK(eigvals[i] > 0, "non-positive eigenvalue"); blasglue_copy(N, D + i*N, 1, E + i*N, 1); blasglue_rscal(N, sqrt(eigvals[i]), E + i*N, 1); } /* compute C = adjoint(D) * E == sqrt (At * A) */ blasglue_gemm('C', 'N', N, N, N, 1.0, D, N, E, N, 0.0, C, N); printf("\nsqrtm(D)\n"); printmat(C,N,N); blasglue_gemm('C', 'N', N, N, N, 1.0, E, N, E, N, 0.0, C, N); printf("\nsqrtm(D) * sqrtm(D)\n"); printmat(C,N,N); debug_check_memory_leaks(); return EXIT_SUCCESS; } mpb-1.5/tests/normal_vectors.c0000644000175400001440000001737112315326050013427 00000000000000#include #include #include #include #include "config.h" #include #include #include #include #include /* return a random number in [0,1]: */ static double mydrand(void) { double d = rand(); return (d / (double) RAND_MAX); } /* return a uniform random number in [a,b] */ static double myurand(double a, double b) { return ((b - a) * mydrand() + a); } #define MAX_NSQ_PTS 72 #define NUM_PLANES 100000 #define NUM_OBJECTS 50 #define K_PI 3.141592653589793238462643383279502884197 static double pin(double x, double a, double b) { return (x < a ? a : (x > b ? b : x)); } /* return the angle, in degrees, between two unit-normalized vectors */ static double angle(vector3 v1, vector3 v2) { double theta = 180/K_PI * acos(pin(vector3_dot(v1,v2), -1,1)); return (theta > 90 ? 180 - theta : theta); } /* return a random unit vector, uniformly distributed over a sphere */ vector3 random_unit_vector3(void) { double z, t, r; vector3 v; z = 2*mydrand() - 1; t = 2*K_PI*mydrand(); r = sqrt(1 - z*z); v.x = r * cos(t); v.y = r * sin(t); v.z = z; return v; } double find_edge(geometric_object o, vector3 dir, double max, double tol) { double min = 0; CHECK(point_in_fixed_objectp(vector3_scale(min, dir), o) && !point_in_fixed_objectp(vector3_scale(max, dir), o), "object out of bounds in find_edge"); do { double d = (min + max) / 2; if (point_in_fixed_objectp(vector3_scale(d, dir), o)) min = d; else max = d; } while (max - min > tol); return (min + max) / 2; } double normal_err_to_object(geometric_object o, double r, vector3 dir) { int i; double d; vector3 c, nsum = {0,0,0}; dir = unit_vector3(dir); d = find_edge(o, dir, 2, r * 0.01); c = vector3_scale(d, dir); for (i = 0; i < num_sphere_quad[2]; ++i) { vector3 v; v.x = sphere_quad[2][i][0] * r; v.y = sphere_quad[2][i][1] * r; v.z = sphere_quad[2][i][2] * r; if (point_in_fixed_objectp(vector3_plus(v, c), o)) nsum = vector3_plus(nsum, vector3_scale(sphere_quad[2][i][3], v)); } CHECK(vector3_norm(nsum) > 1e-6, "couldn't get normal vector"); return angle(unit_vector3(normal_to_object(c, o)), unit_vector3(nsum)); } void normals_to_object(geometric_object o, double r, int ntrials) { int i; double err_mean = 0, err_std = 0, err_max = 0; display_geometric_object_info(0, o); for (i = 0; i < ntrials; ++i) { double dev; double e = normal_err_to_object(o, r, random_unit_vector3()); if (e > err_max) err_max = e; /* stable one-pass formula for mean and std. deviation: */ dev = (e - err_mean) / (i + 1); err_mean += dev; err_std += i*(i+1) * dev*dev; } err_std = sqrt(err_std / (ntrials - 1)); printf("mean error angle for %d-pt formula = " "%g +/- %g degrees, max error = %g degrees\n\n", num_sphere_quad[2], err_mean, err_std, err_max); } static vector3 make_vector3(double x, double y, double z) { vector3 v; v.x = x; v.y = y; v.z = z; return v; } /* return a random geometric object, centered at the origin, with diameter roughly 1 */ geometric_object random_object(void) { material_type m = { 0 }; vector3 c = { 0, 0, 0 }; geometric_object o; switch (rand() % 5) { case 0: o = make_sphere(m, c, myurand(0.5,1.5)); break; case 1: o = make_cylinder(m, c, myurand(0.5,1.5), myurand(0.5,1.5), random_unit_vector3()); break; case 2: o = make_cone(m, c, myurand(0.5,1.5), myurand(0.5,1.5), random_unit_vector3(), myurand(0.5,1.5)); break; case 3: o = make_block(m, c, random_unit_vector3(), random_unit_vector3(), random_unit_vector3(), make_vector3(myurand(0.5,1.5), myurand(0.5,1.5), myurand(0.5,1.5))); break; case 4: o = make_ellipsoid(m, c, random_unit_vector3(), random_unit_vector3(), random_unit_vector3(), make_vector3(myurand(0.5,1.5), myurand(0.5,1.5), myurand(0.5,1.5))); break; } return o; } int main(void) { int i, j; double err_mean, err_std, err_max; double min_angle = 360; int missed; srand(time(NULL)); printf("Testing spherical quadratures for normals to %d surfaces.\n\n", NUM_PLANES); /* compute the minimum angle between pairs of points: */ for (i = 0; i < num_sphere_quad[2]; ++i) for (j = i + 1; j < num_sphere_quad[2]; ++j) { vector3 v1, v2; double a; v1.x = sphere_quad[2][i][0]; v1.y = sphere_quad[2][i][1]; v1.z = sphere_quad[2][i][2]; v2.x = sphere_quad[2][j][0]; v2.y = sphere_quad[2][j][1]; v2.z = sphere_quad[2][j][2]; a = angle(v1,v2); if (a < min_angle && a > 1e-6) min_angle = a; } printf("%d-point formula: minimum angle is %g degrees.\n", num_sphere_quad[2], min_angle); /* Normals to planes: */ err_mean = err_std = err_max = 0.0; missed = 0; for (i = 0; i < NUM_PLANES; ++i) { vector3 n, nsum = {0,0,0}; double d; n = random_unit_vector3(); d = mydrand(); for (j = 0; j < num_sphere_quad[2]; ++j) { vector3 v; real val; v.x = sphere_quad[2][j][0]; v.y = sphere_quad[2][j][1]; v.z = sphere_quad[2][j][2]; val = vector3_dot(v,n) >= d ? 12.0 : 1.0; val *= sphere_quad[2][j][3]; nsum = vector3_plus(nsum, vector3_scale(val, v)); } if (vector3_norm(nsum) < 1e-6) { ++missed; --i; continue; } nsum = unit_vector3(nsum); { /* stable one-pass formula for mean and std. deviation: */ double e, dev; e = angle(n, nsum); if (e > err_max) err_max = e; dev = (e - err_mean) / (i + 1); err_mean += dev; err_std += i*(i+1) * dev*dev; } } err_std = sqrt(err_std / (NUM_PLANES - 1)); printf("planes: mean error angle for %d-pt formula = " "%g +/- %g degrees, max error = %g degrees\n", num_sphere_quad[2], err_mean, err_std, err_max); printf("(Fraction missed = %g)\n", missed * 1.0 / (NUM_PLANES + missed)); /* Normals to spheres: */ err_mean = err_std = 0.0; missed=0; for (i = 0; i < NUM_PLANES; ++i) { vector3 n, nsum = {0,0,0}, c; double r, d; int j; n = random_unit_vector3(); d = mydrand() * 0.8 + 0.1; r = 1.0 + mydrand() * 10; /* radius of the sphere */ c = vector3_scale(r + d, n); /* center of the sphere */ for (j = 0; j < num_sphere_quad[2]; ++j) { vector3 v; real val; v.x = sphere_quad[2][j][0]; v.y = sphere_quad[2][j][1]; v.z = sphere_quad[2][j][2]; val = vector3_norm(vector3_minus(c,v)) <= r ? 12.0 : 1.0; val *= sphere_quad[2][j][3]; nsum = vector3_plus(nsum, vector3_scale(val, v)); } nsum = unit_vector3(nsum); if (vector3_norm(nsum) < 1e-6) { --i; continue; } { /* stable one-pass formula for mean and std. deviation: */ double e, dev; e = angle(n, nsum); if (e > err_max) err_max = e; dev = (e - err_mean) / (i + 1); err_mean += dev; err_std += i*(i+1) * dev*dev; } } err_std = sqrt(err_std / (NUM_PLANES - 1)); printf("spheres: mean error angle for %d-pt formula = " "%g +/- %g degrees, max error = %g degrees\n", num_sphere_quad[2], err_mean, err_std, err_max); printf("\n"); for (i = 0; i < NUM_OBJECTS; ++i) { geometric_object o = random_object(); normals_to_object(o, 0.01, NUM_PLANES/100); geometric_object_destroy(o); } return EXIT_SUCCESS; } mpb-1.5/Makefile.am0000644000175400001440000000023612315337163011117 00000000000000ACLOCAL_AMFLAGS=-I m4 SUBDIRS = src tests mpb utils examples # meb EXTRA_DIST = COPYRIGHT TODO doc m4 README.md dist-hook: git log > $(distdir)/ChangeLog mpb-1.5/doc/0000755000175400001440000000000012315341423007701 500000000000000mpb-1.5/doc/user-ref.html0000644000175400001440000022602312315326037012250 00000000000000 User Reference Go to the next, previous, or main section.

User Reference

Here, we document the features exposed to the user by the MIT Photonic-Bands package. We do not document the Scheme language or the functions provided by libctl (see also the user reference section of the libctl manual).

Input Variables

These are global variables that you can set to control various parameters of the Photonic-Bands computation. They are also listed (along with their current values) by the (help) command. In brackets after each variable is the type of value that it should hold. (The classes, complex datatypes like geometric-object, are described in a later subsection. The basic datatypes, like integer, boolean, cnumber, and vector3, are defined by libctl.)

geometry [list of geometric-object class]
Specifies the geometric objects making up the structure being simulated. When objects overlap, later objects in the list take precedence. Defaults to no objects (empty list).

default-material [material-type class]
Holds the default material that is used for points not in any object of the geometry list. Defaults to air (epsilon of 1). See also epsilon-input-file, below.

ensure-periodicity [boolean]
If true (the default), then geometric objects are treated as if they were shifted by all possible lattice vectors; i.e. they are made periodic in the lattice.

geometry-lattice [lattice class]
Specifies the basis vectors and lattice size of the computational cell (which is centered on the origin of the coordinate system). These vectors form the basis for all other 3-vectors in the geometry, and the lattice size determines the size of the primitive cell. If any dimension of the lattice size is the special value no-size, then the dimension of the lattice is reduced (i.e. it becomes two- or one-dimensional). (That is, the dielectric function becomes two-dimensional; it is still, in principle, a three dimensional system, and the k-point vectors can be three-dimensional.) Generally, you should make any no-size dimension(s) perpendicular to the others. Defaults to the orthogonal x-y-z vectors of unit length (i.e. a square/cubic lattice).

resolution [number or vector3]
Specifies the computational grid resolution, in pixels per lattice unit (a lattice unit is one basis vector in a given direction). If resolution is a vector3, then specifies a different resolution for each direction; otherwise the resolution is uniform. (The grid size is then the product of the lattice size and the resolution, rounded up to the next positive integer.) Defaults to 10.

grid-size [vector3]
Specifies the size of the discrete computational grid along each of the lattice directions. Deprecated: the preferred method is to use the resolution variable, above, in which case the grid-size defaults to false. To get the grid size you should instead use the (get-grid-size) function.

mesh-size [integer]
At each grid point, the dielectric constant is averaged over a "mesh" of points to find an effective dielectric tensor. This mesh is a grid with mesh-size points on a side. Defaults to 3. Increasing mesh-size makes the the average dielectric constant sensitive to smaller structural variations without increasing the grid size, but also means that computing the dielectric function will take longer. (Using a mesh-size of 1 turns off dielectric function averaging and the creation of an effective dielectric tensor at interfaces. Be sure you know what you're doing before you worsen convergence in this way.)

dimensions [integer]
Explicitly specifies the dimensionality of the simulation; if the value is less than 3, the sizes of the extra dimensions in grid-size are ignored (assumed to be one). Defaults to 3. Deprecated: the preferred method is to set geometry-lattice to have size no-size in any unwanted dimensions.

k-points [list of vector3]
List of Bloch wavevectors to compute the bands at, expressed in the basis of the reciprocal lattice vectors. The reciprocal lattice vectors are defined as follows: Given the lattice vectors Ri (not the basis vectors), the reciprocal lattice vector Gj satisfies Ri * Gj = 2*Pi*deltai,j, where deltai,j is the Kronecker delta (1 for i = j and 0 otherwise). (Ri for any no-size dimensions is taken to be the corresponding basis vector.) Normally, the wavevectors should be in the first Brillouin zone (see below). k-points defaults to none (empty list).

num-bands [integer]
Number of bands (eigenvectors) to compute at each k point. Defaults to 1.

target-freq [number]
If zero, the lowest-frequency num-bands states are solved for at each k point (ordinary eigenproblem). If non-zero, solve for the num-bands states whose frequencies are have the smallest absolute difference with target-freq (special, "targeted" eigenproblem). Beware that the targeted solver converges more slowly than the ordinary eigensolver and may require a lower tolerance to get reliable results. Defaults to 0.

tolerance [number]
Specifies when convergence of the eigensolver is judged to have been reached (when the eigenvalues have a fractional change less than tolerance between iterations). Defaults to 1.0e-7.

filename-prefix [string]
A string prepended to all output filenames. Defaults to "" (no prefix).

epsilon-input-file [string]
If this string is not "" (the default), then it should be the name of an HDF5 file whose first/only dataset defines a dielectric function (over some discrete grid). This dielectric function is then used in place of default-material (i.e. where there are no geometry objects). The grid of the epsilon file dataset need not match grid-size; it is scaled and/or linearly interpolated as needed. The lattice vectors for the epsilon file are assumed to be the same as geometry-lattice. [ Note that, even if the grid sizes match and there are no geometric objects, the dielectric function used by MPB will not be exactly the dielectric function of the epsilon file, unless you also set mesh-size to 1 (see above). ]

eigensolver-block-size [integer]
The eigensolver uses a "block" algorithm, which means that it solves for several bands simultaneously at each k-point. eigensolver-block-size specifies this number of bands to solve for at a time; if it is zero or >= num-bands, then all the bands are solved for at once. If eigensolver-block-size is a negative number, -n, then MPB will try to use nearly-equal block-sizes close to n. Making the block size a small number can reduce the memory requirements of MPB, but block sizes > 1 are usually more efficient (there is typically some optimum size for any given problem). Defaults to -11 (i.e. solve for around 11 bands at a time).

simple-preconditioner? [boolean]
Whether or not to use a simplified preconditioner; defaults to false (this is fastest most of the time). (Turning this on increases the number of iterations, but decreases the time for each iteration.)

deterministic? [boolean]
Since the fields are initialized to random values at the start of each run, there are normally slight differences in the number of iterations, etcetera, between runs. Setting deterministic? to true makes things deterministic (the default is false).

eigensolver-flags [integer]
This variable is undocumented and reserved for use by Jedi Masters only.

Predefined Variables

Variables predefined for your convenience and amusement.

air, vacuum [material-type class]
Two aliases for a predefined material type with a dielectric constant of 1.
nothing [material-type class]
A material that, effectively, punches a hole through other objects to the background (default-material or epsilon-input-file).

infinity [number]
A big number (1.0e20) to use for "infinite" dimensions of objects.

Output Variables

Global variables whose values are set upon completion of the eigensolver.

freqs [list of number]
A list of the frequencies of each band computed for the last k point. Guaranteed to be sorted in increasing order. The frequency of band b can be retrieved via (list-ref freqs (- b 1)).

iterations [integer]
The number of iterations required for convergence of the last k point.

parity [string]
A string describing the current required parity/polarization ("te", "zeven", etcetera, or "" for none), useful for prefixing output lines for grepping.

Yet more global variables are set by the run function (and its variants), for use after run completes or by a band function (which is called for each band during the execution of run.

current-k [vector3]
The k point (from the k-points list) most recently solved.

gap-list [list of (percent freq-min freq-max) lists]
This is a list of the gaps found by the eigensolver, and is set by the run functions when two or more k-points are solved. (It is the empty list if no gaps are found.)

band-range-data [list of ((min . kpoint) . (max . kpoint)) pairs (of pairs)]
For each band, this list contains the minimum and maximum frequencies of the band, and the associated k points where the extrema are achieved. Note that the bands are defined by sorting the frequencies in increasing order, so this can be confused if two bands cross.

Classes

Classes are complex datatypes with various "properties" which may have default values. Classes can be "subclasses" of other classes; subclasses inherit all the properties of their superclass, and can be used any place the superclass is expected. An object of a class is constructed with:

(make class (prop1 val1) (prop2 val2) ...)

See also the libctl manual.

MIT Photonic-Bands defines several types of classes, the most numerous of which are the various geometric object classes. You can also get a list of the available classes, along with their property types and default values, at runtime with the (help) command.

lattice

The lattice class is normally used only for the geometry-lattice variable, and specifies the three lattice directions of the crystal and the lengths of the corresponding lattice vectors.

lattice
Properties:
basis1, basis2, basis3 [vector3]
The three lattice directions of the crystal, specified in the cartesian basis. The lengths of these vectors are ignored--only their directions matter. The lengths are determined by the basis-size property, below. These vectors are then used as a basis for all other 3-vectors in the ctl file. They default to the x, y, and z directions, respectively.
basis-size [vector3]
The components of basis-size are the lengths of the three basis vectors, respectively. They default ot unit lengths.
size [vector3]
The size of the lattice (i.e. the length of the lattice vectors Ri, in which the crystal is periodic) in units of the basis vectors. Thus, the actual lengths of the lattice vectors are given by the components of size multiplied by the components of basis-size. (Alternatively, you can think of size as the vector between opposite corners of the primitive cell, specified in the lattice basis.) Defaults to unit lengths.

If any dimension has the special size no-size, then the dimensionality of the problem is reduced by one; strictly speaking, the dielectric function is taken to be uniform along that dimension. (In this case, the no-size dimension should generally be orthogonal to the other dimensions.)

material-type

This class is used to specify the materials that geometric objects are made of. Currently, there are three subclasses, dielectric, dielectric-anisotropic, and material-function.

dielectric
A uniform, isotropic, linear dielectric material, with one property:
epsilon [number]
The dielectric constant (must be positive). No default value. You can also use (index n) as a synonym for (epsilon (* n n)).

dielectric-anisotropic
A uniform, possibly anisotropic, linear dielectric material. For this material type, you specify the (real-symmetric, or possibly complex-hermitian) dielectric tensor (relative to the cartesian xyz axes):
             a  u  v
epsilon =  ( u* b  w )
             v* w* c

This allows your dielectric to have different dielectric constants for fields polarized in different directions. The epsilon tensor must be positive-definite (have all positive eigenvalues); if it is not, MPB exits with an error. (This does not imply that all of the entries of the epsilon matrix need be positive.)

The components of the tensor are specified via three properties:

epsilon-diag [vector3]
The diagonal elements (a b c) of the dielectric tensor. No default value.
epsilon-offdiag [cvector3]
The off-diagonal elements (u v w) of the dielectric tensor. Defaults to zero. This is a cvector3, which simply means that the components may be complex numbers (e.g. 3+0.1i). If non-zero imaginary parts are specified, then the dielectric tensor is complex-hermitian. This is only supported when MPB is configured with the --with-hermitian-eps flag. This is not dissipative (the eigenvalues of epsilon are real), but rather breaks time-reversal symmetry, corresponding to a gyrotropic (magneto-optic) material. Note that inversion symmetry may not mean what you expect for complex-hermitian epsilon, so be cautious about using mpbi in this case.
epsilon-offdiag-imag [vector3]
Deprecated: The imaginary parts of the off-diagonal elements (u v w) of the dielectric tensor; defaults to zero. Setting the imaginary parts directly by specifying complex numbers in epsilon-offdiag is preferred.

For example, a material with a dielectric constant of 3.0 for TE fields (polarized in the xy plane) and 5.0 for TM fields (polarized in the z direction) would be specified via (make (dielectric-anisotropic (epsilon-diag 3 3 5))). Please be aware that not all 2d anisotropic dielectric structures will have TE and TM modes, however.

material-function
This material type allows you to specify the material as an arbitrary function of position. (For an example of this, see the bragg-sine.ctl file in the examples/ directory.) It has one property:
material-func [function]
A function of one argument, the position vector3 (in lattice coordinates), that returns the material at that point.

Note that the function you supply can return any material; wild and crazy users could even return another material-function object (which would then have its function invoked in turn).

Normally, the dielectric constant is required to be positive (or positive-definite, for a tensor). However, MPB does have a somewhat experimental feature allowing negative dielectrics (e.g. in a plasma). To use it, call the function (allow-negative-epsilon) before (run). In this case, it will output the (real) frequency squared in place of the (possibly imaginary) frequencies. (Convergence will be somewhat slower because the eigenoperator is not positive definite.)

geometric-object

This class, and its descendants, are used to specify the solid geometric objects that form the dielectric structure being simulated. The base class is:

geometric-object
Properties:
material [material-type class]
The material that the object is made of (usually some sort of dielectric). No default value (must be specified).
center [vector3]
Center point of the object. No default value.

One normally does not create objects of type geometric-object directly, however; instead, you use one of the following subclasses. Recall that subclasses inherit the properties of their superclass, so these subclasses automatically have the material and center properties (which must be specified, since they have no default values).

Recall that all 3-vectors, including the center of an object, its axes, and so on, are specified in the basis of the normalized lattice vectors normalized to basis-size. Note also that 3-vector properties can be specified by either (property (vector3 x y z)) or, equivalently, (property x y z).

In a two-dimensional calculation, only the intersections of the objects with the x-y plane are considered.

sphere
A sphere. Properties:
radius [number]
Radius of the sphere. No default value.

cylinder
A cylinder, with circular cross-section and finite height. Properties:
radius [number]
Radius of the cylinder's cross-section. No default value.
height [number]
Length of the cylinder along its axis. No default value.
axis [vector3]
Direction of the cylinder's axis; the length of this vector is ignored. Defaults to point parallel to the z axis.

cone
A cone, or possibly a truncated cone. This is actually a subclass of cylinder, and inherits all of the same properties, with one additional property. The radius of the base of the cone is given by the radius property inherited from cylinder, while the radius of the tip is given by the new property:
radius2 [number]
Radius of the tip of the cone (i.e. the end of the cone pointed to by the axis vector). Defaults to zero (a "sharp" cone).

block
A parallelepiped (i.e., a brick, possibly with non-orthogonal axes). Properties:
size [vector3]
The lengths of the block edges along each of its three axes. Not really a 3-vector (at least, not in the lattice basis), but it has three components, each of which should be nonzero. No default value.
e1, e2, e3 [vector3]
The directions of the axes of the block; the lengths of these vectors are ignored. Must be linearly independent. They default to the three lattice directions.

ellipsoid
An ellipsoid. This is actually a subclass of block, and inherits all the same properties, but defines an ellipsoid inscribed inside the block.

Here are some examples of geometric objects created using the above classes, assuming that the lattice directions (the basis) are just the ordinary unit axes, and m is some material we have defined:

; A cylinder of infinite radius and height 0.25 pointing along the x axis,
; centered at the origin:
(make cylinder (center 0 0 0) (material m) 
               (radius infinity) (height 0.25) (axis 1 0 0))


; An ellipsoid with its long axis pointing along (1,1,1), centered on
; the origin (the other two axes are orthogonal and have equal
; semi-axis lengths):
(make ellipsoid (center 0 0 0) (material m)
                (size 0.8 0.2 0.2)
		(e1 1 1 1)
		(e2 0 1 -1)
		(e3 -2 1 1))

; A unit cube of material m with a spherical air hole of radius 0.2 at
; its center, the whole thing centered at (1,2,3):
(set! geometry (list
		(make block (center 1 2 3) (material m) (size 1 1 1))
		(make sphere (center 1 2 3) (material air) (radius 0.2))))

Functions

Here, we describe the functions that are defined by the Photonic-Bands package. There are many types of functions defined, ranging from utility functions for duplicating geometric objects to run functions that start the computation.

See also the reference section of the libctl manual, which describes a number of useful functions defined by libctl.

Geometry utilities

Some utility functions are provided to help you manipulate geometric objects:

(shift-geometric-object obj shift-vector)
Translate obj by the 3-vector shift-vector.

(geometric-object-duplicates shift-vector min-multiple max-multiple obj)
Return a list of duplicates of obj, shifted by various multiples of shift-vector (from min-multiple to max-multiple, inclusive, in steps of 1).

(geometric-objects-duplicates shift-vector min-multiple max-multiple obj-list)
Same as geometric-object-duplicates, except operates on a list of objects, obj-list. If A appears before B in the input list, then all the duplicates of A appear before all the duplicates of B in the output list.

(geometric-objects-lattice-duplicates obj-list [ ux uy uz ])
Duplicates the objects in obj-list by multiples of the lattice basis vectors, making all possible shifts of the "primitive cell" (see below) that fit inside the lattice cell. (This is useful for supercell calculations; see the tutorial.) The primitive cell to duplicate is ux by uy by uz, in units of the basis vectors. These three parameters are optional; any that you do not specify are assumed to be 1.

(point-in-object? point obj)
Returns whether or not the given 3-vector point is inside the geometric object obj.

(point-in-periodic-object? point obj)
As point-in-object?, but also checks translations of the given object by the lattice vectors.

(display-geometric-object-info indent-by obj)
Outputs some information about the given obj, indented by indent-by spaces.

Coordinate conversion functions

The following functions allow you to easily convert back and forth between the lattice, cartesian, and reciprocal bases. (See also the note on units in the tutorial.)

(lattice->cartesian x), (cartesian->lattice x)
Convert x between the lattice basis (the basis of the lattice vectors normalized to basis-size) and the ordinary cartesian basis, where x is either a vector3 or a matrix3x3, returning the transformed vector/matrix. In the case of a matrix argument, the matrix is treated as an operator on vectors in the given basis, and is transformed into the same operator on vectors in the new basis.

(reciprocal->cartesian x), (cartesian->reciprocal x)
Like the above, except that they convert to/from reciprocal space (the basis of the reciprocal lattice vectors). Also, the cartesian vectors output/input are in units of 2 Pi.

(reciprocal->lattice x), (lattice->reciprocal x)
Convert between the reciprocal and lattice bases, where the conversion again leaves out the factor of 2 Pi (i.e. the lattice-basis vectors are assumed to be in units of 2 Pi).

Also, a couple of rotation functions are defined, for convenience, so that you don't have to explicitly convert to cartesian coordinates in order to use libctl's rotate-vector3 function (see the libctl reference):

(rotate-lattice-vector3 axis theta v), (rotate-reciprocal-vector3 axis theta v)
Like rotate-vector3 , except that axis and v are specified in the lattice/reciprocal bases.

Usually, k-points are specified in the first Brillouin zone, but sometimes it is convenient to specify an arbitrary k-point. However, the accuracy of MPB degrades as you move farther from the first Brillouin zone (due to the choice of a fixed planewave set for a basis). This is easily fixed: simply transform the k-point to a corresponding point in the first Brillouin zone, and a completely equivalent solution (identical frequency, fields, etcetera) is obtained with maximum accuracy. The following function accomplishes this:

(first-brillouin-zone k)
Given a k-point k (in the basis of the reciprocal lattice vectors, as usual), return an equivalent point in the first Brillouin zone of the current lattice (geometry-lattice).

Note that first-brillouin-zone can be applied to the entire k-points list with the Scheme expression: (map first-brillouin-zone k-points).

Run functions

These are functions to help you run and control the simulation. The ones you will most commonly use are the run function and its variants. The syntax of these functions, and one lower-level function, is:

(run band-func ...)
This runs the simulation described by the input parameters (see above), with no constraints on the polarization of the solution. That is, it reads the input parameters, initializes the simulation, and solves for the requested eigenstates of each k-point. The dielectric function is outputted to "epsilon.h5" before any eigenstates are computed. run takes as arguments zero or more "band functions" band-func. A band function should be a function of one integer argument, the band index, so that (band-func which-band) performs some operation on the band which-band (e.g. outputting fields). After every k-point, each band function is called for the indices of all the bands that were computed. Alternatively, a band function may be a "thunk" (function of zero arguments), in which case (band-func) is called exactly once per k-point.

(run-zeven band-func ...), (run-zodd band-func ...)
These are the same as the run function except that they constrain their solutions to have even and odd symmetry with respect to the z=0 plane. You should use these functions only for structures that are symmetric through the z=0 mirror plane, where the third basis vector is in the z direction (0,0,1) and is orthogonal to the other two basis vectors, and when the k vectors are in the xy plane. Under these conditions, the eigenmodes always have either even or odd symmetry. In two dimensions, even/odd parities are equivalent to TE/TM polarizations, respectively (and are often strongly analogous even in 3d). Such a symmetry classification is useful for structures such as waveguides and photonic-crystal slabs. (For example, see the paper by S. G. Johnson et al., "Guided modes in photonic crystal slabs," PRB 60, 5751, August 1999.)

(run-te band-func ...), (run-tm band-func ...)
These are the same as the run function except that they constrain their solutions to be TE- and TM-polarized, respectively, in two dimensions. The TE and TM polarizations are defined has having electric and magnetic fields in the xy plane, respectively. Equivalently, the H/E field of TE/TM light has only a z component (making it easier to visualize).

These functions are actually equivalent to calling run-zeven and run-zodd, respectively.

Note that for the modes to be segregated into TE and TM polarizations, the dielectric function must have mirror symmetry for reflections through the xy plane. If you use anisotropic dielectrics, you should be aware that they break this symmetry if the z direction is not one of the principle axes. If you use run-te or run-tm in such a case of broken symmetry, MPB will exit with an error.

(run-yeven band-func ...), (run-yodd band-func ...)
These functions are analogous to run-zeven and run-zodd, except that they constrain their solutions to have even and odd symmetry with respect to the y=0 plane. You should use these functions only for structures that are symmetric through the y=0 mirror plane, where the second basis vector is in the y direction (0,1,0) and is orthogonal to the other two basis vectors, and when the k vectors are in the xz plane.

run-yeven-zeven, run-yeven-zodd, run-yodd-zeven, run-yodd-zodd, run-te-yeven, run-te-yodd, run-tm-yeven, run-tm-yodd
These run-like functions combine the yeven/yodd constraints with zeven/zodd or te/tm. See also run-parity, below.

(run-parity p reset-fields band-func ...)
Like the run function, except that it takes two extra parameters, a parity p and a boolean (true/false) value reset-fields. p specifies a parity constraint, and should be one of the predefined variables:
  • NO-PARITY: equivalent to run
  • EVEN-Z (or TE): equivalent to run-zeven or run-te
  • ODD-Z (or TM): equivalent to run-zodd or run-tm
  • EVEN-Y (like EVEN-Z but for y=0 plane)
  • ODD-Y (like ODD-Z but for y=0 plane)

It is possible to specify more than one symmetry constraint simultaneously by adding them, e.g. (+ EVEN-Z ODD-Y) requires the fields to be even through z=0 and odd through y=0. It is an error to specify incompatible constraints (e.g. (+ EVEN-Z ODD-Z)). Important: if you specify the z/y parity, the dielectric structure (and the k vector) must be symmetric about the z/y=0 plane, respectively.

If reset-fields is false, the fields from any previous calculation will be reused as the starting point from this calculation, if possible; otherwise, the fields are reset to random values. The ordinary run functions use a default reset-fields oftrue. Alternatively, reset-fields may be a string, the name of an HDF5 file to load the initial fields from (as exported by save-eigenvectors, below).

(display-eigensolver-stats)
Display some statistics on the eigensolver convergence; this function is useful mainly for MPB developers in tuning the eigensolver.

Several band functions for outputting the eigenfields are defined for your convenience, and are described in the Band output functions section, below. You can also define your own band functions, and for this purpose the functions described in the section Field manipulation functions, below, are useful. A band function takes the form:

(define (my-band-func which-band)
  ...do stuff here with band index which-band...
)

Note that the output variable freqs may be used to retrieve the frequency of the band (see above). Also, a global variable current-k is defined holding the current k-point vector from the k-points list.

There are also some even lower-level functions that you can call, although you should not need to do most of the time:

(init-params p reset-fields?)
Read the input variables and initialize the simulation in preparation for computing the eigenvalues. The parameters are the same as the first two parameters of run-parity. This function must be called before any of the other simulation functions below. (Note, however, that the run functions all call init-params.)

(set-parity p)
After calling init-params, you can change the parity constraint without resetting the other parameters by calling this function. Beware that this does not randomize the fields (see below); you don't want to try to solve for, say, the TM eigenstates when the fields are initialized to TE states from a previous calculation.

(randomize-fields)
Initialize the fields to random values.

(solve-kpoint k)
Solve for the requested eigenstates at the Bloch wavevector k.

The inverse problem: k as a function of frequency

MPB's (run) function(s) and its underlying algorithms compute the frequency w as a function of wavevector k. Sometimes, however, it is desirable to solve the inverse problem, for k at a given frequency w. This is useful, for example, when studying coupling in a waveguide between different bands at the same frequency (frequency is conserved even when wavevector is not). One also uses k(w) to construct wavevector diagrams, which aid in understanding diffraction (e.g. negative-diffraction materials and super-prisms). To solve such problems, therefore, we provide the find-k function described below, which inverts w(k) via a few iterations of Newton's method (using the group velocity dw/dk). Because it employs a root-finding method, you need to specify bounds on k and a crude initial guess (order of magnitude is usually good enough).

(find-k p omega band-min band-max kdir tol kmag-guess kmag-min kmag-max [band-func...])
Find the wavevectors in the current geometry/structure for the bands from band-min to band-max at the frequency omega along the kdir direction in k-space. Returns a list of the wavevector magnitudes for each band; the actual wavevectors are (vector3-scale magnitude (unit-vector3 kdir)). The arguments of find-k are:
  • p: parity (same as first argument to run-parity, above).
  • omega: the frequency at which to find the bands
  • band-min, band-max: the range of bands to solve for the wavevectors of (inclusive).
  • kdir: the direction in k-space in which to find the wavevectors. (The magnitude of kdir is ignored.)
  • tol: the fractional tolerance with which to solve for the wavevector; 1e-4 is usually sufficient. (Like the tolerance input variable, this is only the tolerance of the numerical iteration...it does not have anything to do with e.g. the error from finite grid resolution.)
  • kmag-guess: an initial guess for the k magnitude (along kdir) of the wavevector at omega. Can either be a list (one guess for each band from band-min to band-max) or a single number (same guess for all bands, which is usually sufficient).
  • kmag-min, kmag-max: a range of k magnitudes to search; should be large enough to include the correct k values for all bands.
  • band-func: zero or more band functions, just as in (run), which are evaluated at the computed k points for each band.

The find-k routine also prints a line suitable for grepping:

kvals: omega, band-min, band-max, kdir1, kdir2, kdir3, k magnitudes...

Band/output functions

All of these are functions that, given a band index, output the corresponding field or compute some function thereof (in the primitive cell of the lattice). They are designed to be passed as band functions to the run routines, although they can also be called directly. See also the section on field normalizations.

(output-hfield which-band)
(output-hfield-x which-band)
(output-hfield-y which-band)
(output-hfield-z which-band)
Output the magnetic (H) field for which-band; either all or one of the (Cartesian) components, respectively.

(output-dfield which-band)
(output-dfield-x which-band)
(output-dfield-y which-band)
(output-dfield-z which-band)
Output the electric displacement (D) field for which-band; either all or one of the (Cartesian) components, respectively.

(output-efield which-band)
(output-efield-x which-band)
(output-efield-y which-band)
(output-efield-z which-band)
Output the electric (E) field for which-band; either all or one of the (Cartesian) components, respectively.

(output-hpwr which-band)
Output the time-averaged magnetic-field energy density (hpwr = |H|2) for which-band.

(output-dpwr which-band)
Output the time-averaged electric-field energy density (dpwr = epsilon*|E|2) for which-band.

(fix-hfield-phase which-band)
(fix-dfield-phase which-band)
(fix-efield-phase which-band)
Fix the phase of the given eigenstate in a canonical way based on the given spatial field (see also fix-field-phase, below). Otherwise, the phase is random; these functions also maximize the real part of the given field so that one can hopefully just visualize the real part. To fix the phase for output, pass one of these functions to run before the corresponding output function, e.g. (run-tm fix-dfield-phase output-dfield-z)

Although we try to maximize the "real-ness" of the field, this has a couple of limitations. First, the phase of the different field components cannot, of course, be chosen independently, so an individual field component may still be imaginary. Second, if you use mpbi to take advantage of inversion symmetry in your problem, the phase is mostly determined elsewhere in the program; fix-_field-phase in that case only determines the sign.

See also below for the output-poynting and output-tot-pwr functions to output the Poynting vector and the total electromagnetic energy density, respectively.

Sometimes, you only want to output certain bands. For example, here is a function that, given an band/output function like the ones above, returns a new output function that only calls the first function for bands with a large fraction of their energy in an object(s). (This is useful for picking out defect states in supercell calculations.)

(output-dpwr-in-objects band-func min-energy objects...)
Given a band function band-func, returns a new band function that only calls band-func for bands having a fraction of their electric-field energy greater than min-energy inside the given objects (zero or more geometric objects). Also, for each band, prints the fraction of their energy in the objects in the following form (suitable for grepping):
dpwr:, band-index, frequency, energy-in-objects

output-dpwr-in-objects only takes a single band function as a parameter, but if you want it to call several band functions, you can easily combine them into one with the following routine:

(combine-band-functions band-funcs...)
Given zero or more band functions, returns a new band function that calls all of them in sequence. (When passed zero parameters, returns a band function that does nothing.)

It is also often useful to output the fields only at a certain k-point, to let you look at typical field patterns for a given band while avoiding gratuitous numbers of output files. This can be accomplished via:

(output-at-kpoint k-point band-funcs...)
Given zero or more band functions, returns a new band function that calls all of them in sequence, but only at the specified k-point. For other k-points, does nothing.

Miscellaneous functions

(retrieve-gap lower-band)
Return the frequency gap from the band #lower-band to the band #(lower-band+1), as a percentage of mid-gap frequency. The "gap" may be negative if the maximum of the lower band is higher than the minimum of the upper band. (The gap is computed from the band-range-data of the previous run.)

Parity

Given a set of eigenstates at a k-point, MPB can compute their parities with respect to the z=0 or y=0 plane. The z/y parity of a state is defined as the expectation value (under the usual inner product) of the mirror-flip operation through z/y=0, respectively. For true even and odd eigenstates (see e.g. run-zeven and run-zodd), this will be +1 and -1, respectively; for other states it will be something in between.

This is useful e.g. when you have a nearly symmetric structure, such as a waveguide with a substrate underneath, and you want to tell which bands are even-like (parity > 0) and odd-like (parity < 0). Indeed, any state can be decomposed into purely even and odd functions, with absolute-value-squared amplitudes of (1+parity)/2 and (1-parity)/2, respectively.

display-zparities, display-yparities
These are band functions, designed to be passed to (run), which output all of the z/y parities, respectively, at each k-point (in comma-delimited format suitable for grepping).

(compute-zparities)
Returns a list of the parities about the z=0 plane, one number for each band computed at the last k-point.

(compute-yparities)
Returns a list of the parities about the y=0 plane, one number for each band computed at the last k-point.

(The reader should recall that the magnetic field is only a pseudo-vector, and is therefore multiplied by -1 under mirror-flip operations. For this reason, the magnetic field appears to have opposite symmetry from the electric field, but is really the same.)

Group velocities

Given a set of eigenstates at a given k-point, MPB can compute their group velocities (the derivative of frequency with respect to wavevector) using the Hellman-Feynmann theorem. Three functions are provided for this purpose, and we document them here from highest-level to lowest-level.

display-group-velocities
This is a band function, designed to be passed to (run), which outputs all of the group velocity vectors (in the Cartesian basis, in units of c) at each k-point.

(compute-group-velocities)
Returns a list of group-velocity vectors (in the Cartesian basis, units of c) for the bands at the last-computed k-point.

(compute-group-velocity-component direction)
Returns a list of the group-velocity components (units of c) in the given direction, one for each band at the last-computed k-point. direction is a vector in the reciprocal-lattice basis (like the k-points); its length is ignored. (This has the advantage of being three times faster than compute-group-velocities.)

Field manipulation

The Photonic-Bands package provides a number of ways to take the field of a band and manipulate, process, or output it. These methods usually work in two stages. First, one loads a field into memory (computing it in position space) by calling one of the get functions below. Then, other functions can be called to transform or manipulate the field.

The simplest class of operations involve only the currently-loaded field, which we describe in the second subsection below. To perform more sophisticated operations, involving more than one field, one must copy or transform the current field into a new field variable, and then call one of the functions that operate on multiple field variables (described in the third subsection).

Field normalization

In order to perform useful operations on the fields, it is important to understand how they are normalized. We normalize the fields in the way that is most convenient for perturbation and coupled-mode theory [c.f. SGJ et al., PRE 65, 066611 (2002)], so that their energy densities have unit integral. In particular, we normalize the electric (E), displacement (D = epsilon*E) and magnetic (H = -i/omega * curl E) fields, so that:

  • integral epsilon*|E|2 dxdydz = 1
  • integral |H|2 dxdydz = 1

where the integrals are over the computational cell. Note the volume element dxdydz (the volume of a grid pixel/voxel). If you simply sum |H|2 over all the grid points, therefore, you will get (# grid points) / (volume of cell).

Note that we have dropped the pesky factors of 1/2, pi, etcetera from the energy densities, since these do not appear in e.g. perturbation theory, and the fields have arbitrary units anyway. The functions to compute/output energy densities below similarly use epsilon*|E|2 and |H|2 without any prefactors.

Loading and manipulating the current field

In order to load a field into memory, call one of the get functions follow. They should only be called after the eigensolver has run (or after init-params, in the case of get-epsilon). One normally calls them after run, or in one of the band functions passed to run.

(get-hfield which-band)
Loads the magnetic (H) field for the band which-band.

(get-dfield which-band)
Loads the electric displacement (D) field for the band which-band.

(get-efield which-band)
Loads the electric (E) field for the band which-band. (This function actually calls get-dfield followed by get-efield-from-dfield, below.)

(get-epsilon)
Loads the dielectric function.

Once loaded, the field can be transformed into another field or a scalar field:

(get-efield-from-dfield)
Multiplies by the inverse dielectric tensor to compute the electric field from the displacement field. Only works if a D field has been loaded.

(fix-field-phase)
Fix the currently-loaded eigenstate's phase (which is normally random) in a canonical way, based on the spatial field (H, D, or E) that has currently been loaded. The phase is fixed to make the real part of the spatial field as big as possible (so that you can hopefully visualize just the real part of the field), and a canonical sign is chosen. See also the fix-*field-phase band functions, above, which are convenient wrappers around fix-field-phase

(compute-field-energy)
Given the H or D fields, computes the corresponding energy density function (normalized by the total energy in H or D, respectively). Also prints the fraction of the field in each of its cartesian components in the following form (suitable for grepping):
f-energy-components:, k-index, band-index, x-fraction, y-fraction, z-fraction

where f is either h or d. The return value of compute-field-energy is a list of 7 numbers: (U xr xi yr yi zr zi). U is the total, unnormalized energy, which is in arbitrary units deriving from the normalization of the eigenstate (e.g. the total energy for H is always 1.0). xr is the fraction of the energy in the real part of the field's x component, xi is the fraction in the imaginary part of the x component, etcetera (yr + yi = y-fraction, and so on).

Various integrals and other information about the eigenstate can be accessed by the following functions, useful e.g. for perturbation theory. Functions dealing with the field vectors require a field to be loaded, and functions dealing with the energy density require an energy density to be loaded via compute-field-energy.

(compute-energy-in-dielectric min-eps max-eps)
Returns the fraction of the energy that resides in dielectrics with epsilon in the range min-eps to max-eps.

(compute-energy-in-objects objects...)
Returns the fraction of the energy inside zero or more geometric objects.

(compute-energy-integral f)
f is a function (f u eps r) that returns a number given three parameters: u, the energy density at a point; eps, the dielectric constant at the same point; and r, the position vector (in lattice coordinates) of the point. compute-energy-integral returns the integral of f over the unit cell. (The integral is computed simply as the sum over the grid points times the volume of a grid pixel/voxel.) This can be useful e.g. for perturbation-theory calculations.

(compute-field-integral f)
Like compute-energy-integral, but f is a function (f F eps r) that returns a number (possibly complex) where F is the complex field vector at the given point.

(get-epsilon-point r)
Given a position vector r (in lattice coordinates), return the interpolated dielectric constant at that point. (Since MPB uses a an effective dielectric tensor internally, this actually returns the mean dielectric constant.)

(get-epsilon-inverse-tensor-point r)
Given a position vector r (in lattice coordinates), return the interpolated inverse dielectric tensor (a 3x3 matrix) at that point. (Near a dielectric interface, the effective dielectric constant is a tensor even if you input only scalar dielectrics; see the epsilon overview for more information.) The returned matrix may be complex-Hermetian if you are employing magnetic materials.

(get-energy-point r)
Given a position vector r (in lattice coordinates), return the interpolated energy density at that point.

(get-field-point r)
Given a position vector r (in lattice coordinates), return the interpolated (complex) field vector at that point.

(get-bloch-field-point r)
Given a position vector r (in lattice coordinates), return the interpolated (complex) Bloch field vector at that point (this is the field without the exp(ikx) envelope).

Finally, we have the following functions to output fields (either the vector fields, the scalar energy density, or epsilon), with the option of outputting several periods of the lattice.

(output-field [ nx [ ny [ nz ] ] ])
(output-field-x [ nx [ ny [ nz ] ] ])
(output-field-y [ nx [ ny [ nz ] ] ])
(output-field-z [ nx [ ny [ nz ] ] ])
Output the currently-loaded field. The optional (as indicated by the brackets) parameters nx, ny, and nz indicate the number of periods to be outputted along each of the three lattice directions. Omitted parameters are assumed to be 1. For vector fields, output-field outputs all of the (Cartesian) components, while the other variants output only one component.

(output-epsilon [ nx [ ny [ nz ] ] ])
A shortcut for calling get-epsilon followed by output-field. Note that, because epsilon is a tensor, a number of datasets are outputted in "epsilon.h5":
  • "data": 3/trace(1/epsilon)
  • "epsilon.{xx,xy,xz,yy,yz,zz}": the (Cartesian) components of the (symmetric) dielectric tensor.
  • "epsilon_inverse.{xx,xy,xz,yy,yz,zz}": the (Cartesian) components of the (symmetric) inverse dielectric tensor.

Storing and combining multiple fields

In order to perform operations involving multiple fields, e.g. computing the Poynting vector ExH, they must be stored in field variables. Field variables come in two flavors, real-scalar (rscalar) fields, and complex-vector (cvector) fields. There is a pre-defined field variable cur-field representing the currently-loaded field (see above), and you can "clone" it to create more field variables with one of:

(field-make f)
Return a new field variable of the same type and size as the field variable f. Does not copy the field contents (see field-copy and field-set!, below).

(rscalar-field-make f)
(cvector-field-make f)
Like field-make, but return a real-scalar or complex-vector field variable, respectively, of the same size as f but ignoring f's type.

(field-set! fdest fsrc)
Set fdest to store the same field values as fsrc, which must be of the same size and type.

(field-copy f)
Return a new field variable that is exact copy of f; this is equivalent to calling field-make followed by field-set!.

(field-load f)
Loads the field f as the current field, at which point you can use all of the functions in the previous section to operate on it or output it.

Once you have stored the fields in variables, you probably want to compute something with them. This can be done in three ways: combining fields into new fields with field-map! (e.g. combine E and H to ExH), integrating some function of the fields with integrate-fields (e.g. to compute coupling integrals for perturbation theory), and getting the field values at arbitrary points with *-field-get-point (e.g. to do a line or surface integral). These three functions are described below:

(field-map! fdest func [f1 f2 ...])
Compute the new field fdest to be (func f1-val f2-val ...) at each point in the grid, where f1-val etcetera is the corresponding value of f1 etcetera. All the fields must be of the same size, and the argument and return types of func must match those of the f1... and fdest fields, respectively. fdest may be the same field as one of the f1... arguments. Note: all fields are without Bloch phase factors exp(ikx).

(integrate-fields func [f1 f2 ...])
Compute the integral of the function (func r [f1 f2 ...]) over the computational cell, where r is the position (in the usual lattice basis) and f1 etc. are fields (which must all be of the same size). (The integral is computed simply as the sum over the grid points times the volume of a grid pixel/voxel.) Note: all fields are without Bloch phase factors exp(ikx). See also the note below.

(cvector-field-get-point f r)
(cvector-field-get-point-bloch f r)
(rscalar-field-get-point f r)
Given a position vector r (in lattice coordinates), return the interpolated field cvector/rscalar from f at that point. cvector-field-get-point-bloch returns the field without the exp(ikx) Bloch wavevector, in analogue to get-bloch-field-point.

You may be wondering how to get rid of the field variables once you are done with them: you don't, since they are garbage collected automatically.

We also provide functions, in analogue to e.g get-efield and output-efield above, to "get" various useful functions as the current field and to output them to a file:

(get-poynting which-band)
Loads the Poynting vector E*xH for the band which-band, the flux density of electromagnetic energy flow, as the current field. 1/2 of the real part of this vector is the time-average flux density (which can be combined with the imaginary part to determine the amplitude and phase of the time-dependent flux).

(output-poynting which-band)
(output-poynting-x which-band)
(output-poynting-y which-band)
(output-poynting-z which-band)
Output the Poynting vector field for which-band; either all or one of the (Cartesian) components, respectively.

(get-tot-pwr which-band)
Load the time-averaged electromgnetic-field energy density (|H|2 + epsilon*|E|2) for which-band. (If you multiply the real part of the Poynting vector by a factor of 1/2, above, you should multiply by a factor of 1/4 here for consistency.)

(output-tot-pwr which-band)
Output the time-averaged electromgnetic-field energy density (above) for which-band.

As an example, below is the Scheme source code for the get-poynting function, illustrating the use of the various field functions:

(define (get-poynting which-band)
  (get-efield which-band)                      ; put E in cur-field
  (let ((e (field-copy cur-field)))            ; ... and copy to local var.
    (get-hfield which-band)                    ; put H in cur-field
    (field-map! cur-field                      ; write ExH to cur-field
                (lambda (e h) (vector3-cross (vector3-conj e) h))
                e cur-field)
    (cvector-field-nonbloch! cur-field)))      ; see below

Stored fields and Bloch phases

Complex vector fields like E and H as computed by MPB are physically of the Bloch form: exp(ikx) times a periodic function. What MPB actually stores, however, is just the periodic function, the Bloch envelope, and only multiplies by exp(ikx) for when the fields are output or passed to the user (e.g. in integration functions). This is mostly transparent, with a few exceptions noted above for functions that do not include the exp(ikx) Bloch phase (it is somewhat faster to operate without including the phase).

On some occasions, however, when you create a field with field-map!, the resulting field should not have any Bloch phase. For example, for the Poynting vector E*xH, the exp(ikx) cancels because of the complex conjugation. After creating this sort of field, we must use the special function cvector-field-nonbloch! to tell MPB that the field is purely periodic:

(cvector-field-nonbloch! f)
Specify that the field f is not of the Bloch form, but rather that it is purely periodic.

Currently, all fields must be either Bloch or non-Bloch (i.e. periodic), which covers most physically meaningful possibilities.

There is another wrinkle: even for fields in Bloch form, the exp(ikx) phase currently always uses the current k-point, even if the field was computed from another k-point. So, if you are performing computations combining fields from different k-points, you should take care to always use the periodic envelope of the field, putting the Bloch phase in manually if necessary.

Manipulating the raw eigenvectors

MPB also includes a few low-level routines to manipulate the raw eigenvectors that it computes in a transverse planewave basis.

The most basic operations involve copying, saving, and restoring the current set of eigenvectors or some subset thereof:

(get-eigenvectors first-band num-bands)
Return an eigenvector object that is a copy of num-bands current eigenvectors starting at first-band. e.g. to get a copy of all of the eigenvectors, use (get-eigenvectors 1 num-bands).

(set-eigenvectors ev first-band)
Set the current eigenvectors, starting at first-band, to those in the ev eigenvector object (as returned by get-eigenvectors). (Does not work if the grid sizes don't match)

(load-eigenvectors filename)
(save-eigenvectors filename)
Read/write the current eigenvectors (raw planewave amplitudes) to/from an HDF5 file named filename. Instead of using load-eigenvectors directly, you can pass the filename as the reset-fields parameter of run-parity, above. (Loaded eigenvectors must be of the same size (same grid size and #bands) as the current settings.)

Currently, there's only one other interesting thing you can do with the raw eigenvectors, and that is to compute the dot-product matrix between a set of saved eigenvectors and the current eigenvectors. This can be used, e.g., to detect band crossings or to set phases consistently at different k points. The dot product is returned as a "sqmatrix" object, whose elements can be read with the sqmatrix-size and sqmatrix-ref routines.

(dot-eigenvectors ev first-band)
Returns a sqmatrix object containing the dot product of the saved eigenvectors ev with the current eigenvectors, starting at first-band. That is, the (i,j)th output matrix element contains the dot product of the (i+1)th vector of ev (conjugated) with the (first-band+j)th eigenvector. Note that the eigenvectors, when computed, are orthonormal, so the dot product of the eigenvectors with themselves is the identity matrix.

(sqmatrix-size sm)
Return the size n of an nxn sqmatrix sm.

(sqmatrix-ref sm i j)
Return the (i,j)th element of the nxn sqmatrix sm, where {i,j} range from 0..n-1.

Inversion Symmetry

If you configure MPB with the --with-inv-symmetry flag, then the program is configured to assume inversion symmetry in the dielectric function. This allows it to run at least twice as fast and use half as much memory as the more general case. This version of MPB is by default installed as mpbi, so that it can coexist with the usual mpb program.

Inversion symmetry means that if you transform (x,y,z) to (-x,-y,-z) in the coordinate system, the dielectric structure is not affected. Or, more technically, that:

epsilon(x,y,z) = epsilon(-x,-y,-z)*,

where the conjugation is significant for complex-hermitian dielectric tensors. This symmetry is very common; all of the examples in this manual have inversion symmetry, for example.

Note that inversion symmetry is defined with respect to a specific origin, so that you may "break" the symmetry if you define a given structure in the wrong way--this will prevent mpbi from working properly. For example, the diamond structure that we considered earlier would not have possessed inversion symmetry had we positioned one of the "atoms" to lie at the origin.

You might wonder what happens if you pass a structure lacking inversion symmetry to mpbi. As it turns out, mpbi only looks at half of the structure, and infers the other half by the inversion symmetry, so the resulting structure always has inversion symmetry, even if its original description did not. So, you should be careful, and look at the epsilon.h5 output to make sure it is what you expected.

Parallel MPB

We provide two methods by which you can parallelize MPB. The first, using MPI, is the most sophisticated and potentially provides the greatest and most general benefits. The second, which involves a simple script to split e.g. the k-points list among several processes, is less general but may be useful in many cases.

MPB with MPI parallelization

If you configure MPB with the --with-mpi flag, then the program is compiled to take advantage of distributed-memory parallel machines with MPI, and is installed as mpb-mpi. (See also the installation section.) This means that computations will (potentially) run more quickly and take up less memory per processor than for the serial code.

Using the parallel MPB is almost identical to using the serial version(s), with a couple of minor exceptions. The same ctl files should work for both. Running a program that uses MPI requires slightly different invocations on different systems, but will typically be something like:

unix% mpirun -np 4 mpb-mpi foo.ctl

to run on e.g. 4 processors. A second difference is that 1D systems are currently not supported in the MPI code, but the serial code should be fast enough for those anyway. A third difference is that the output HDF5 files (epsilon, fields, etcetera) from mpb-mpi have their first two dimensions (x and y) transposed; i.e. they are output as YxXxZ arrays. This doesn't prevent you from visualizing them, but the coordinate system is left-handed; to un-transpose the data, you can process it with mpb-data and the -T option (in addition to any other options).

In order to get optimal benefit (time and memory savings) from mpb-mpi, the first two dimensions (nx and ny) of your grid should both be divisible by the number of processes. If you violate this constraint, MPB will still work, but the load balance between processors will be uneven. At worst, e.g. if either nx or ny is smaller than the number of processes, then some of the processors will be idle for part (or all) of the computation. When using inversion symmetry (mpbi-mpi) for 2D grids only, the optimal case is somewhat more complicated: nx and (ny/2 + 1), not ny, should both be divisible by the number of processes.

mpb-mpi divides each band at each k-point between the available processors. This means that, even if you have only a single k-point (e.g. in a defect calculation) and/or a single band, it can benefit from parallelization. Moreover, memory usage per processor is inversely proportional to the number of processors used. For sufficiently large problems, the speedup is also nearly linear.

MPI support in MPB is thanks to generous support from Clarendon Photonics.

Alternative parallelization: mpb-split

There is an alternative method of parallelization when you have multiple k points: do each k-point on a different processor. This does not provide any memory benefits, and does not allow one k-point to benefit by starting with the fields of the previous k-point, but is easy and may be the only effective way to parallelize calculations for small problems. This method also does not require MPI: it can utilize the unmodified serial mpb program. To make it even easier, we supply a simple script called mpb-split (or mpbi-split) to break the k-points list into chunks for you. Running:

unix% mpb-split num-split foo.ctl

will break the k-points list in foo.ctl into num-split more-or-less equal chunks, launch num-split processes of mpb in parallel to process each chunk, and output the results of each in order. (Each process is an ordinary mpb execution, except that it numbers its k-points depending upon which chunk it is in, so that output files will not overwrite one another and you can still grep for frequencies as usual.)

Of course, this will only benefit you on a system where different processes will run on different processors, such as an SMP or a cluster with automatic process migration (e.g. MOSIX). mpb-split is actually a trivial shell script, though, so you can easily modify it if you need to use a special command to launch processes on other processors/machines (e.g. via GNU Queue).

The general syntax for mpb-split is:

unix% mpb-split num-split mpb-arguments...

where all of the arguments following num-split are passed along to mpb. What mpb-split technically does is to set the MPB variable k-split-num to num-split and k-split-index to the index (starting with 0) of the chunk for each process. If you want, you can use these variables to divide the problem in some other way and then reset them to 1 and 0, respectively.


Go to the next, previous, or main section. mpb-1.5/doc/diamond-eps.gif0000644000175400001440000013467512315324631012532 00000000000000GIF89aŠŠ÷ÿÿÿÿÿÿÿÿÿÿÿ½ÿÿ½ÿÞÿÿÞ½ÿÞ½ÿÞ{ÿÞ{ÿ½ÿÿ½ÿÿ½½ÿ½{ÿ½{ÿ½9ÿ½9ÿœÿÿœ½ÿœ{ÿœ9ÿœ9ÿ{ÿÿ{ÿÿ{½ÿ{{ÿ{9ÿ{ÿZÿÿZ½ÿZ½ÿZ{ÿZ{ÿZ9ÿZ9ÿZÿZÿ9ÿÿ9½ÿ9{ÿ99ÿ9ÿÿÿ½ÿ{ÿ9ÿÿÿÿÿÿ½ÿ½ÿ{ÿ{ÿ9ÿ9ÿÿ½ÿÿ½ÿÿ½ÿ½½ÿ½½ÿ{½Þÿ½Þ½½Þ½½Þ{½Þ{½½ÿ½½ÿ½½½½½½½½{½½{½½9½½9½œÿ½œÿ½œ½½œ½½œ{½œ{½œ9½œ9½{ÿ½{ÿ½{{½{9½{½Zÿ½Zÿ½Z{½Z{½Z9½Z9½Z½Z½9{½9{½99½9½9½½9½9½½{ÿÿ{ÿÿ{ÿ½{Þÿ{Þ½{Þ½{Þ{{Þ9{½ÿ{½ÿ{½½{½{{½{{½9{½9{½{½{œÿ{œÿ{œ½{œ½{œ{{œ9{œ{œ{{ÿ{{ÿ{{½{{{{{9{{{Zÿ{Z½{Z½{Z{{Z{{Z9{Z9{Z{Z{9ÿ{9ÿ{9{{9{{99{9{9{9{{{9Þÿ9Þ½9Þ½9Þ{9½ÿ9½ÿ9½½9½½9½{9½{9½99½99œÿ9œ½9œ½9œ{9œ{9œ99œ9œ9{ÿ9{½9{{9{99{9Zÿ9Z½9Z½9Z{9Z{9Z99Z99Z9Z99ÿ99½99{99{999999ÿ9ÿ9½9½9999999½ÿ½ÿ½½½{œÿœÿœ½œ{œ9œ{ÿ{ÿ{½{½{{{{{9{9{{ZÿZÿZ½Z½Z{Z{Z9ZZ9ÿ9ÿ9½9{999ÿ½{{9ÿÿ½½99,ŠŠ@ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠ À€ T)°É—0cÊœI³¦M‚Élý*&)Þ¯{Å€ÞûYÌg¾bë~ɳµÎV»TäRik£ª œ“\š¼Éµ«×¯`ÚܑÜ&¶âk´íP¡’„½7h]ºr…“‡ôW»AÚb‘Û£ÊG¬a+^Ì8l2ƒ.ª”µgÖYƒÈeNÔîWR¶ë‚Î;·t^ѧñþŠçÔ–¢Aæ–‹en,9WY |ܸ·ïß¿·FTù€*9…RÕÖ{ÊàØg‹kté=[ù©e«o±£¡Õnÿ÷,©]¬¦šÉ%r—Ù)Ííiv·G›œ:ˆëßÏ#o* C9Ð1+rP›Ú@5Äs™ ffÜ›l‚íAŽ-jÙ`±ü¥™9²÷W;r6H|ì­#X‰¦GÛ… QÄBÿô§ãŽ^ §‘n.í€(å²D6"Ë‘>ô±7m4Èl{@÷$•µ¨¡`Îeȉƒ±§ž˜K˜¸‡;Sœ¸bˆòA•ÙŠƒˆ#"fV%`Ê-AY)å·<*hC>äðCd¹h= Àa(5€XdQ¤£T¦g™ƒübË-ÚBß|{4Õ‡/’#Ç”ÚT©@«Ë9ÿ'GzÂVloŠ˜ª³‘Óå`éÁiâ bîñ—œ¾n¨sb¾*7>ÜöG*Qуf«Ø/Üæ³š[?6ÔQz½Õ“_‚IE•¬èC>ᇑ”ÉÂÙzoÒgê¦Ò/‹i² ðˆKØgƒr¬ÍÜ Á9Trsk«³=üf¯qB56©†ø&˜¸Î‡oìå ÛÇJ¼)0µa«íÍ©¤’ò‹Nòxöj¨™ftjwýSNÉ Õ¨ÑGÜä0"`Un ¬ÇñÉ“¦{À$B¢"ëÉGì š35>T3DU)'ìð“¯®Ê Êõ]™,†¾Fÿj;¿Æe`Ë=éÜŠS|yk…ÚLÁ ƒOæý¸Á?éÃqíºŠóç•öùƒf™“ø F5[u‰Œ .Päm×[¨Õµ”O§š§^|ñ¥'TrÜæ¶¯$6¾\f‰Ó–™l›¡™ûÇ öx <Ñ'ç*8JnS³jݬ Æ ­ÒK¾5YS“ÊäS˜Î\;0«af³fد©‰à?²› lȃ8Nrà²C¡EðAr@œätÚr‰ p„·ÙŠp³‚̓²&#q|hœaŠ$‚¶Žž¤E)'”Gþ~±!S¨tÂïò!øˆ ·PDlŽÓ°«m¨N¦»®ÿÐçæ©2+£&0©…P f(q™3E°a@9(Eþ°¶P´Ê>Üpβ´¢÷‹W{ÀT §øËúsŠ`Hv5òÎ*dÑüÔÖª†ñ0Zr˜Eúð.‡%6ëO2þ±ÈÝ6«;ñŽN$s‘™Ð$²ÆÑç”qº—y`8¦{Éã=N‘O"æ½*QIXÂÒÛšdÈ> $‘Ä ðùÿÝGH(Aªã€,|ËQέøÈ°BšìQ\°*'.alY™qÓÿD梺#„ði0ÚW9(§—ãÞe,©Š<ár•)ª%±'{@Ò’¹L—éì 0Ëèp¹lO—™ã[£«ŠI%Ô€ª¨Á=@ƒj>xNšˆÅ,˜h=ib%±ÒJd%NT‡;‡'6Á‘ðR€ôæ&±/o„$‹nòÀ|&ƒH€YK°‚’ ‚^{øÃ lAÓÒNïûP²Ä¶Ç…biè3G”è÷œù+6>DÝéRJR(ƒ`zsR·«¯š#„ŒK+ÞÆ®ÿµõSÐW:a¨&Þµ5wò1Ö fqØœú`Zu +" PDe:íèÉ^H»|PW4Þ‚Q¬ëºñ¸(* ²UQzÕž‘£ÂBG™¸S©§Ž©8Ñü¢ãœ'1×}¬\md‘!ÊôÀ(¡_?ªXÔGª+¢t¦%üãŒý²c"äÔ»½¬·XÏüPT1 ihn|¬Oåà ±,A¥²ÔcÞŽW¼æ œÐuŽSŒ%¶Ó™Yú=Ô¬ª†häj€ÖTÔ¦!ô.†$ÒYŤQÚÈ&0í¡áTÇŽ«.ÙýÎu]ÇeIdùËDYÊg!D÷=)Þ«F =äicÿ·ƒ˜‡¿ØDáú¦vT‚É1›¤†fæ}†pƒ({ú)!ü\†¢– Æ>U©†\C´ÕQÎ Ðm˜\Œ+mÚJÜPÀöV6ŠSƒaúmúêš™ZILKâÙˆ7>ÿÉušî}kC ‹ºInŠ`TÞKB+Í> *h5( ªÑU6í³3`ê·Ôëx+^n w¿³Ý-ÿ‚\ÙŠÊdÇÓLãcGIB=ëXQþä¨,;‰é^cšfÁhl)4:£f°b½¡¡Gœ:JñŒ_$ñöÆ U³Ü|Bè˜ÛÄfU:]Dac™¸oî¤Ì,šT~ú!”Ò Ì\"©e²¢”Imñ ‚¥Œþ%雾{,<øfèF|E¨R{YŹ۲%ݬ¢¬$#þ*žQ¿è™êë<8Iø‡òÙ­$†ENÒ¸ÃèŽOm‘KX=HBzÿÞ q 6X žDÝëEžØ§*ðeÃÈÑàRø¯ü#’XvP8^wŸaks%}t`ËáE„±ÿ0Hð}2zõäìçÄCúU+±kïF,)òUw¤VHǯôzS‚¼5}ƒ°«ÄM”E0â1$V%Ìe+–*škEäCí³a[ÒBF£„&øã^÷rc/Âa5Pjã3ÿ0 ÑÕÖ†x䔡 K (ŠR`‘(’pPmP ñâra¸‡0 >Dm/ÎD/pGSlBÓ··ÿàFBôqe#CàS….³L|XjÇ¡>?¤H±xjql±AÓ dV©à=ÐÐ6k&9X6åÔJ¯”µ”vaõM°TgÉ7#_´AD¶*÷õ8½²ø+Î_âdõ0²AG£:’—AÉbMȳ!£BSr Læ£0kØ^ µ‹ù£"§0Õ;b>À 8³ÿ0+­1ŠÚ¶]áR]ú;v‘eª‰f‰X;Srðm %¯Ñ"éôf+BäÔ1uBÃp …· îHT³µjŽÈ«ŠÚU’Üf’`†’#IB¶ðhës>Uå=ÜÐfEG‚‘ÿ²,`ÕQ÷2Kp*£}%“Y©ÖG¿ƒt!ÇxŒãa¯–^Ð>¨ ³D–5°R>Ð0§ö„Üócm“ljð„x"1´ihòöFgÇÅ.í6Gø8.ÝÆeßÖ'ùmØu¤‘”É€ÿÔn—AS{@{##lç…8v–ù¢5•ã6ª`…t‡éçÂtÁ°ƒe ù™(‰eER'ø8ÈF1{4ÐÅF©RZMN,‚{€OÇÆ=à„?¶cöQ ç£Aªj™,PÑŒŠéš´±P ¥i¢Tœ‰yv¾ÒµsU‚ ¦*ù…¼i0 p³`ÿmž©ev¹mÜ¥—W&š'nˆé?s ±6ÍZh"?ó!óLT‡l2 ­yü5â&vù€€C±àuiH|Õ…ex™]jxî…V»3o—%¶Z" “U³ækè6o™”%âã}…¡6à„êõLã•l¦ögPSi€BæŸ"6œÑÃKÿ£8–i.R†ŸñFåÖýçøb*tÂUZbiG’wY’êy¥)‰¥X–Cs*|1£H¹‡§MQWŽ“n'š/?ÉÊ"yñ³ÕÀ !j4*Y’kX¤Ì)#½òuæa*L"°Ô+”ö%kò^¢‚“Jÿç73„nÎä–KBdyÖ d´s5F*Î-N˜lCÀGâ¨7Ä;#¸Œ~ºG³*Q¶>³,‚!Œb÷§Òö>ÕÙ  åYgò ¶'¡šXêpçI¡çù?qíFŽr#>p‰(AE ‡CPƒ p\aEQ ý °¢_·,Vi!=W%³ò—¤±p;z4èY—æÉm%¤:ö0*¿_]r"¿µ¶Žm•Џ—dœÁ¤&ò¡hô,4:ŒËFb £'–ãx²/#•%¡p0U0nz1çÅ!F$WþÙîÈ tP5ÿܰ›ªê}°2!gr/´Ä;“NtÉžéY]Æ*³¿ÿÚeРÉb u›ë¦2¤SH£/}@pŽ¢…ˆŠo Rq`À™_ÒSRö4*š,ä#§•ƒÇlÑe)y’Z¶ì5 Z2"[å7•s$•êCÖ²p’X ^ª*“pe~¶Õ8³a:MYrV›«ôY²›'LîÐf1g7ѱHkˆmœnîIŠß6{J "ÈqlXBäÒž4Û™{9šb‹]îj]¬Ás‘B!&a5Nò1}ùÓ>ÕZ(ƒ`Dmp´;ð~a­7Á´º!)‘Ò'ÂCoãa/(ŽäÀ§”n—šª…S $¶•kºì¡³t8`‚€âUóÿ3,Ëq¨JɦN7Fõ8 ‘Ñ÷^³Ä’ gÐw5zÁ•Ÿ'Å !4—XÚ×[¬¹]ÿ(¬Á³yºêéeº¬‚hd¶[ÖJå¾@Ù?ȳl ³>µ«'ì²-w(L«üä 0ˆó¹Ü±$ZU¢"îð£t¹°G¢‡ûj ÜÀGÁùðPX‰•¸ò`hùPf“¶I™%$õ·O6w)³O˜·MXUÝJÿð[Q´1ÏO²YÀ’À;»ÿ°O÷ÃpÂ9ñ‰¢!Uú®3Û@)à= •[J÷Zà$2ý'ª• ÀÉ®¤1n>!sæK%‹Wk±æÏÑt¿’™HGi0Š?[ü?—:)&1iÖ¼Y^Äw*äùÆ_æmm,ºÃŠÆeÍflÍØ\¡Aa'T 2U²È<ì‘i1f{îk‹a³qä"ZÓÉzs7<› vd Œ “¬*á$c»Ï|K¡FⵕÂV×!Ò{æp·c¥*¹ Võ•N¨jP³6݇_ô· @ª#² Kúcaëå[Z‚¯§²Ž^Ŧ,k‘­ü<Íd›ÉºÍÀ0BßÿAsô6t;CCÀ”ËÆnL—ñRè2æÐ’4øgTc5ˆã!––?/[Þæq¤$,±„! 3j)u}à&¶pÏ1a‰¬Oq(aJº/ý«¸Ã­¡P ýˆ:$Ó7²–Zñ1|£P0ñÅB¶ ³´%YbMÿ°;TxFˆ cÂ/rÔ>]À%9Àœ§/-]àæ†EG`(ï’©‡%â01 9KÅØ)$4ºÓ?\Í?]AÌBPUUóoÄãz’*ËvÈÞ£ 0-0ƒLTp?É!Ö%qÜ‘@3§˜ì®ÞA;àÁ!ñe9ž<ƒ$²¤¦eØÜ¬<‘ª'©ÿpÚ4Ô§â×éñh)^…“CÀíj³¥{žÚœù©‡¹¢/ùC6†“^…0q“2zy–j±äÐNóVCF¨1íØ Ç=-¬ .º¬q*29>xW+0ˆ:’ b’[TB~tPÖã(ÇĽÂ1ptv’M;Ð-vòP©c^y§Ôȃyèž}PU SrÀÜ™LÀÅÀpÍüÞ \¹ÄzÖ¬—%äh\Û*øFøŠ?É—qºbÒ+½(JßGo¡ÒQIÞÞüØÚ­Aãr“_YÙYÃiùFHL3‚Ua=(.! 3Ewé]Ôñ"Qå=2©ž b Å _Ü*¹ÿP[ ØÛ¡CT’ä’Àp<­ÚK¾Æl’¹6%¹ƒN.Ë;(ˆ¯C·‹¥Ê#ò*Ë)%rµ*òÔAcÄ:æ“MÆØkžiì:ò}9ìò‡§·=¥POøQ*w‰"Qçä€ÐzšƒW„ìïB:â(–()">3EÀpÉèYÿÐÏ×ÇG͵N…3r¿P©Qþ1kÂ[\ƒ+º#8:÷d“ƒss”eþÌ.ÝÒ°Î]wX(ÅñÉpÂùt3ÖSIàˆßæÃàÞá¾Ú4ÛùÀ­'{»]™lg2fuQ‹V°›Žo*lŸ$=¯"ƒ°"ϸç«Ô î–¾ò ¾m/.D ÿ‚J;ì%>ð¾z/s23OPN2%“•½Þ’˜ðèÄúàÁ*Ä—¶K‘v°Ù*ê#^A«#•pÒ½-®Hø%"œ9@ ž°.² P?—˜¼e õ¶0·¡D€É@ì83w^OlPöeÜõ”‡£ G¶xĬç;}” Þ¼0á%Ï7Y\*æ÷î‹.ãv*ÜÎæpkE8Uù“ë‚Ía©9UrÈ4çQ-›ƒÿTO‡RpÅAóXöàÕyŸû çúCu9à¶ñ)èÂÛŽ’¡4T™ Bš®›Ù:¨½ÏK/î”v³¡šRH*;o‡#åÿKî¸ã!þy/ðº_þ#áO6"hJ†Ö䧚Šçÿ0B“?ºJÄ7 Ç¥ë^½£3 Úöp›¢m¹%Ôö˜Rh+t<  "Œ5näØÑãG{Ãì}$YÒäI”)U®dÙÒåK˜$âãÇU±n“W¬Ý¯|¿î :´(Q¡Hÿ!5š´(Ðb÷€:u*Ij¾¨’ŽnµŠTž¤v¶nå¨ÀM?1 AF Äd’î]¼yõîåÛï\Œ?rìs$¢YCÅÂz•jÓ¥ùºJ6:¹êÕ¨@'oÆ|OÒ­A‰Uå8{ÖoÊdðN¯fÝÚõkØ&“q<ÿ;SíÙ vä¸eë*çd[åÌ”)Ôu<%ÅË¡vÀ®íƦ^Ýúuì~G¢<û£*[ñ‚Ž9‘ØA±šëf:uvøñåϧïr;Êa¦ÛbŒ¾zz}p@9šÍ£aöz¯@tðAÄ蟒þ‘B 3ÔpÃùîãðCCqÄí¹DSTñÃÔäØCŽ>äˆeYÚEU¾kc”ÜÈŽ´ˆkE"‹4Ò½XlùEy’Jª'»‚2³'üEßli'qRÑæ;Ê:«¿#Ë4³È šóa9ÈÑò—xˆ«Ò³9³ªsJ<µ¢²˜uÀŠ¥DÌÙã–‡l‚îLÿD…ð¬"ö˜e Y!g r$]B›XÜìó§8ÊO'õ¤sÏx~4¬SqÇ@ÝÙPsäP‹LEkµÕµ¹æ*:ä0„Ò=´ Aµ±…œ=¨9hJɉŨJ×ÑÒ–uþLD ¨5uiÃ’Ö rRqgƒÆ «ÒV÷çØAmv V†Ø•VT»õ^|="s&ýŽÈŽ6þVn€-¸Rs ÊT„™=hŠw&WÕAÖm§]-!GcŽÛy5w¹x‘ÿl—b`°UIEM޲èÍwfeNI¿¹žsn\¦e‰>±%‡´QyuT…ø !¾t n‚]‚!ÿ¸‘4SIÙ½ØJ"7SˆÅm7PI§´atéVdOnä)n›Ø% !«-›;:‘f¾KJÆ[€I䞊‰'<8qsÝp±IEå€ÈG¶€_5d9†-–XdaÖa7Ý™ââSµÛI%u!Rˆê.}6؃Út]J3íT*ÅtRg=v¶ÙXXG–ˆcqaˆANE(!ÝQþ(`̘(ìцØc¹ã„ÒªP?µ2Ê9™üeS¯½] jÚ¨Ÿ›a÷pgÆvSÔaÁkÊ¥±WµNxËR7V;r´rІ—.%‡b™YÏ¢Tÿð~ÇAd%lc̹T·5×™ÎMȇCHÁ… Ar¨†rTŠå‡>Ü1í'%úƒöfÝ8*4™â“|#¡H)}Sl_$§&I«YËÒFAìGC@£ °[Öñ²Æ¼J™Î àJëØ5«9‹!}h+rX‡Œ¢ ¥ð5h8,¨Q ƒ¯KÖ@6ˆ<â¯i™ÒCq‘«kgc$62¥.I2®b ÞÄbצXLr…~˜Œè'.˜ãÏÞŠ¨•8'LM;È$ƒuI‹Å~XºÇÍ'%;ÙiŠ¥‚ß–¾•)±Éñj]\žëð§Š!¨p!¼9ÿ˜Â)<!·˜ÂóB‰“"h/.C:Fâr¶øˆ½ªÆ Ç>¶¡† B0Ê Æ.ªP¸hII4bml[[µ%‚21\¬ó˜»la.5m!6”\èà;öa5yŽi\©¡Yèð{øÁ@D1D–(§v5á™M0åÒ±jjL-éRcLׯ”—ÀânóÀXOOç²U!¢ÃÝ”u6–v\’ãú0‘¶Xä/piËl(C *Òi•:ÙŒÕP¯…ðêzÖN…g2²ž¬XpÓ©¤‡®¬k >ød¤¢ŠT°b ?0”F¼w¤dŒô°~‰Îsø5„ÿ‹ Æ{0b,„c[HÙ”‡5qÔ’Xrm™»TÖ²•© #ÃÂáPg åQ¬„f,W°bØ+x†°ƒ“” D7 úÀ«-Âö|°+̱ò$щË\жav¤†æ)A¾b°£dÚîºÚ’͵®KÝÆìêÓÕªJdéaÙÆ¥EÏ^JU¿ÄÁ.+ºR@6`ì‰Îb‹ôQD'gAzN.hDÙ!Ñâæ=öÞŒé6vù‹±h©K-„Ym;³T×EWu‹[&Ö u­ÏMUk]£¤’YËßÊ¡ ‹HB¨GùtÀ¦¸v®Öõ4¹a¡ŠË–¹Lÿ -Âýލá¥7aÑpDÉLc¨l”)s*~Œ –—œ,Ïø‘kÐK£‡IˆµV°m}-^…PÞ.äó#†«Va¦,3¡€94›‰0ÃFö0£Ÿñ³§dcë Šø–«bÖºØOÍÑbQp³a³Õf[Æ´Öwbg£X—«§úa,Ó†YÉTÈ‚ÀT5Ùµ1ÓÁ*ñpYXzaý¥\sçfñÀb=‹[¦2ÜT*ÓQ‰J3My6S¥¤… Ÿõ$XǸ„£K§v‰í:%œ‹ÜíE·i«òõRÁ…ˆDôó??h)CùIµèЦ.bÿ-²¬VqKKGe¨óè:ÍQV#Ì7¶;L«im|Ã©ÖØšc®ª4L+Æñ$­°•(Õ$ÀSƒÛ5ãuhjÁ™ ¶7GpE‰AƒµSå¥V.cœ§4*žQzy²Õ-‡E äÄö£Ä·ø¿æm‘äÅ& q=I°²¢?’|ÀÇA¤”eQ‹Zø“ÿ6ˆBŸjö–±‡y!³©øÇëTþÙfžMkªk4f]c¶<ÿªc˜‰an`zïÚ˜AY b¶iS#«:®Ja£eSøÆÖ† ›*“X ‹Ú(…åÇhä@ŒÜÈÁJ#/aA¯\ôÿ<µþ”¸v,çJpBzU°|àŸ1ȯ˸>?…YàèÛâ†ÕÒÆÚ-®僄¦8 ŽDç-3ÉMGåò’¸hî髲$º•Š[,¡†å²þ þ¡4Ÿžšçp¤ªöv~’Ð*x®™H'ú—³c<>b“¢£|â¸L“cQ#.‹™Ó"µ±‹±©j*5-¯Ôʬ  6˜jÀ¬°Bµúʺ²‰£v9¤I[!2ãI«`³˜Ža›SqžŽ›qIߢ¸åa–©Y$fR`p¡A¨†È¡ˆ³@ÆÊˆ{C I¿ì‰ähººÓ/y™ù[ˆB£‡A˜dž.%YÈžÿ¬ê‹\Y ˆ‘[PŠ-rˆ€3¯D8«)­çµ8úªšd-EÂ'9ع¤\¸œ•°çj‹ÜP‹?à•6©Rª·…`ƒa^,ÌŽd„= T †N †P¨ûÁ.|Ú.‚qDH‰!Èñªš…!p{˜…=èƒ!X¼p”—€ÂrÚæ‚® ) :È£Úó¹Æ/ÂÆúÁF1нšë# ò­I·@Eº²\“I­qA=â«£2ÄÿâqĦ!˜{‚ qKµ`k5!°1#=Ü’€ZÄpA@Y­?Á‚œB/¸)„úhÀ E"  ­[›¹b(b®Öó$’¶¨ƒ`“xQ{—]rЬàŠÎ¸>)œnI’XhFì8rR%Œ@À6“)ˆ…Tpˆ•ú©÷²– Œ¤ àºp‰?Vÿ€*ðÊ…Xó°àk’x9LÊ L©Œ“àÓ¢=pœúùGÙ£¦™‚08ŽQK…”nY-®£¿âكɮŸƒÚé-Ü<«”.!µX 7uÅTxKëªz(â I¸É0T£M„›„ë–ÿÞ”p3 ™b¾3„øƒ:¢ c!>ÊXºi3L¦«²Ç€Î)€©© Y©ª5¤úwH¯•¹6–¼!ĘJ¸!”È#:hÊnˆ·á”+s6é,>jËÏ (•° ÖQª£¡¹îòI37¶1ð:¨‘,5e !<¤º!h'?ZÅË¢§J¨)ÍÝ‚#uº[;!•‚J+M¢% ô4¨94‡{j™#ÈhÀj°üq–瑤–š®6 ÂDŸ¦«Î¦³ jƒNOI È·ê4nš±Ö¼˜¤1—•Û˜VSIi‚§Ÿ)Ð0œT…>à†à‰Pxp£Ñ)ÿjI„|R.tŒý,é|ºiqÖyÉT …QŠ‘LTÎ[!ak5­{¬ñ«=Ð& ËHÚ«®yz<ªóÖ›š6™DÉ”¯îâHÌ»‚•ÒËZp;¡ô …¨àÆÿ?>+Û â©LŠžøá+ûÝ7¦¶Ì­JàÅUà(²f &(j,‘‡IŠe=$™­q`@ ºjDH$£K{*Ì¢½èU˜ø¨¹`€Ш&Yc§È’ãEˆÜ«Q¼«bבÁðsÈ6ÆŒÀü ÿL9˜úŠº 3dŽUQ²‚˜#+NÕ,LIûEV¼WÞú‡è£ ååõÕŸtÛ+Yž×¾j{ξf8=m–æœþáiÞéYj¬>T¹â2ŠÚæY47Ršµ!=Ý»µ$–Œ 8RX›_°gêH ‘ðj1 Âêƒ+qÚËÅŠähK¥ LWñ±W9­ÚB!„jJ&jSwñ’THÁ –Oº³L3ˆ¾£‘ñ×~ÚL4Õ)¦DPiÓã@vù4‡BIÁÈ¿ÖÁêʽŒ ~fÎŒ8F:m<.íjNŠ ¥½T˜  嫪 5Ë´SԪ߯(‚ÿ 嶦êTi!dÀ‰"B‰Ð˨Ò8õì+2j™Æz’ K˜‚“”…<,˜‡¡6ªž»WxŠ't½ÑAR—¸tx¸?ÀKÆÁäŒ1(ø&!üT§Cëß%â(Š’5ëå Šˆ‡8‚éÊGfmƒhp¼mmêSþá·JhË¢§s+ú¢Ìúæ+—Eê©R3ÞlE[Uo¨(»&Ÿ®ÆÎŒH›€âN‹¸áæ›Öï¡(3ÊÚJ*ÔÜ~”L/AQ~Ÿ§ L®%«uåóäA¶Ñ”iÙB(ògS£;R,ï‰NéÖ8–„·¹×;Ò£ÿujƒGaUÞêÔJ\‚ˆAÊ'‚é²f)ÓãëÔnci»¨p­XX©Š”U)³4ò¬Qû»SÛHˆØrÒ—ùàê˜0€à§R â$½“«4Éaó£ÌZâºÚ[|í²dC–q”¡cIîŸÖ mé»]r?opÖrÍ}f8ž–Ö»R÷BšŒ ‹yAf1›„ÍNè_ÑløÓ@iåÉ)i¹oTæl,ÿ饻¶ÓÈ j=¬‰«Bï°[(š!C@ÊF¢ÙNX[¹iT?ºçÄÆ 䉫N…i„©C.q7 :à®Ê}‹pX×é,G:#•¶&™xât•3ƒÛÿT™°íö5ñ¤ÚÖ³ J–j¸¥.‡ Émf¡¦ñ“} Ÿ¦Õ-ü0ºÉGdÅ’D«’œ£ˆ¹Â˜ˆñ9‹çp¡E/³Æh È…§!¨:‚l§•оî+€â²y¤$‰¹øƒ_n©Ø·Ïø+'øà5IÜ)O°¸ë JýA cžvxÍQ£÷ ‹!ú„98ׯÀ2¦cnl®ñ+×ã©HŒ?Xç2'®z»®Öy#‰ñèKŒ@œ?)(à%ý,†ÐcŸõTÇŠRYxw¼YDÉžl UP¥´$N¸¿Mžayí9›·PfæiËúgÿ÷‚G`'’…XØqÆÿWrð+®Æ ‚0Q$Þa°úh–vkNëÈE8й;ª!Ð ÃÉdrça8—!d•¼•Y‚”±R:ˆ{².–¶FjÈ”pm’’wãmNÙL7%›ŒxôHßý¼xqGLjñƒÃ³øû‰púyˆ[¶ÈÅgËÜ rƒ¸MÑ&‡[j‰Ú%[W,߯{%Å»˜q£FŒ!‹Ý“”¤I”'K®ü%Ò䯎ù$Ýû%oàžj>´-L¸ÇÜ…ÉýLK!Qw{Ú%âI.èž[{fÉéSà €0à7mfMÕN¹_í\Ú,LÒÚvÅdí¡Kw¼xðíë÷/àÀ“Ùlÿø0âÄŠ3nìø1dÆZäØ1¤Îž>¡TùPÕÆ¡@y4‹É ÉÑf¬uG§$‡ NqƒÜ%´µ6ž-‘C~|Ùò7É%5Ö\iòh,nr8»[ÒΖÓX@º¢Û…í‚N*KÎ,E LÈù|d{Éгoïþ=üø 'öºcÏŸV¥³=Z7€ÿeÄní òOB§ÉÓn»¹¤Ro½ XœJRÈÒ/ÚìÁÔ%‡†æd—PPG "ˇD™3guÀ0ÊY2ðÌx#Ž9ê¸#z?ðCg9HõÜ:6IÈ’ bôH =X\„¦]ÈV’f”RM7‘ƒ“*rDÿ35rT“Ã(>°âÃ(mÔ‘ÔÑ ô¥~Ù3Lyê¹'Ÿ:®˜>rvËùÄ"‹-·7“”MÎĤ•UÒô$•Jh\¤¤ýÒß-?0Àœ}F˜¨¥šz*ª:zÅ—}9‘ÃCü10ŽFi”JNèäo¹Ê“Š}øàãªæåygªÉ*»,³ïÑ÷(З°úpËω” £Žî it©2>xj±7ÖØ,»íºû®{.Æ•ɈÕGGøÐ‡£Àšƒ>¸‘×§ãxç³ð*¼0à C&ïaxòX#Ä[|1Æ;öO`?l£Æ!‹<2Éæ1ÿTÿ\2Ë-»ü2Ì1Ë<3Í53–°Í9ë¼³žöT@ëE°|ѹ2ÏI+­t2±Øb ¿Ä$Eªfu*¶J,©p–¦x¥»4Ùe³œŒ-1Å4ZMm ÇöhQÏ/‰³‡6m¤DÁÑšý7àÍÚãÃ@ý‹pW¶q‰7NÜhtßc ÕëØ‚M,Ú,QfÆþ9è;>‹×u ‚8n ç8ã(=ÞúâÃC7Ý–+D—!°ÂÉΡûþ»`+ƒ¨v¥BÐ:U3û€¿.;ô¬w„›í#>Uˆt <÷¿#ýe–õBis|j”S>;G°7ïºûÎ3Nù/ë$ÿ¢Sù7Db,âuÿ?Ïz‡˜Éø  9X“A8%☈-,G»Ó¨ŽmFäV¿ªE9âÀRˆ ÖìPcÀ÷¨B… p1ZñJö•)`ƒDN±Nv²ãÁû¥ïjj+í~øC^ír¶Ù0Aûµƒ!GPh•ˆæÜbXÁ[!gæ¹!ªÀÛN– !hè) $Šl2"qì6l´œý¶d9mä(Q,ß ›æ/!JT`;° ,˜c Réœß²¨H>¥>ÿdÁ"E@CšsŠîF c"AQâdc j2[Ö›‚(!Ê=`c" a¶ÿ”8&²f)ªŒE;P™C‚3>Jä`)Ìvá]Àrà/NrŒ·ÃSÌ'ÆRƒDg å 5ÇÇ]v’Nüc;–’­0—íÔe.eÁšiRL ZògJ«=k¤µ´›j¾†ð9!XÐ:­¬Êj’•šp¦¥jß/ªBØíLaÑÔ†‰Í15%3Žþ-ÊIYKMýšû\ ~Øyo{žÚÒH"©¬ˆɳ6–¼Ë@7¤œñ0ç–ÌH"Yì’ÿÛí­TÁX&U)"ÑK5ç¡§’#˜^mvà^²Ò›xc {¡²IP'PÔN‰€4&*£X`àRõI%]ZYXq¦ÑòÛ˜qížh€E{˜,]ÄAõÕDud3›‹Ý: Â%ØzŠTònIê¤KO±2 ·ã”{›±–â8Þl“üº„Ç  ^ºH‡ÂêǾæÓ¸±„jšÑ¥M÷iËèШÞ—^ AÄV[<Ðr4YÇÊ@knD§L±`´EøÀS|9®Ägä~b Üö±½1×IËM®$’ 1ëÜö¼Ïnƒñ*SÞú”A¶͉(äJ#ûÒÊ|—Lÿ%UùmÈ?6Û’—‹`4-V ljƒ°<3Æ0ÉWÔ¨/»— Ò~Q› =½eù`j†œåýöG,þ~LD‚ñm Í›á§/êS9PF§)‹»{¶X„‚´HÁa|=ØA Æ™~Ó[á;]µÑ­ë\‡N,‘âJír)PãxuB—sÓþ?½&ÊÁ³ÙÝ”BtN] Å ¡ š¨Š¥‰'‰œI—pì”eG&ÍÁÓn]lxÕðŸ Úòá qV u’‘ˆ¥áßrÈš°àKØlOÄa_¨L ]@5¸[CÙÖ̵giÃûÿqòmœ×1a]”X.YÎvÄ‘‘¡ˆ-…üÔt4ÕOª1•$Y…=…Yc, _ÀˆüÁ$åyE‰hÒ;-AXõXÜÜFÙg}q–¶‰9Z,pQ”~E£×¸ðK ÄÐÀÉ­¹‹ÄxL2`âÂhÅXËÐÉ—¦å¦ÝŒÅ–ODá)Ê’Ö¡" ÍÒWZ;x–!’ÐÑ€=¡ÌÂ$M4ùÔ¢!E2Ý5”„™N…ÑxÄUvTm=Ô(žTƒM„ðmV’¡-9ÅâfÙXI•“@Ù¢Õ6ŒV92Ô>Ô=â2J_ä I »¬ÿJeXK(]”#9 ›‡$ÓÝQ0&ÿ=E”‰ÙÆA—8™Ô9É­”ÔƒsD$¸`Ëym›ëuDÁWºV´Ñ+ Á=NŒ$àh…V$ª[Š•s¨R…Ò[¦âÕF ŽÖ¥ 2'išiMë-Y3~~G)LŸ.>â,¿tÑTÅŒÇxxÅ1î”VÀ¨t+€gPÿƒ@ƒ¹&54¨4xÑgæ@˜àÝQº,~škNè Þ$VñŸ!"äM™%4MŠŒ‹ ;þܽŒ¼DÜ®eåOIÒ ,QJ[VáW¥oFÔo‚FdUªÉbwÖVm¹¢ýØè˜R¨“úD¦œÝUà–ÉÐåG˜èb>F$­,AÅLb¢a‹d‰ÇzÎzŠô g¨B(ÄZÜDI,HGˆÝÜ\¤AÐÑùHC(x&4 Ái~ÇS„£HÅ"C"*©"ι VÅ%tXã¨i‘á ½d9Æàôöà0Á£ÃHL´$'Á<<§bòÿ'`¥Ó6® A´›vpšº™–iÁUIÛ>þÙg…£Eµ Ø+n¿¹%Qè\¢µ›‘JصøÔ0êœOæñ•âqR¥¥KüÁ^E4Áæ½^°MOˆ [¡®ŽˆIÎÆY6th8žAƒ„›¶}[7±“+vUPšT-µ“€ÉšÏNtd¡ÈCÑE¹ŽaiÈ Ã#­Ý¸ê`Ï=Ô3E§¢éVñÙÆ^ bØ•e_>ÔºISIÃ8R!wÀª9 M$ÞiˆÖ š‚}U!L ’!5U—˜ƒ$BTØ¡‹nRþÜ%_yi.ñ›BL™ tÿ‰†Ü‚YDƒxó<Ï¡MÄYú`C*`?ªÁh®&;‰T5)¶ùO¬wèþ”;Ô¡Ô•Ñ£âMÙw0¿ b°ªÅà‰ÀÄ›€2~^v¤•u*„Œ”Q ˆ:“õ¢%Qš¤íÙR¶[5iSï!HV]™¬SxiÂ^çj´¢:Õ¹qF´ÁŠ„Óy¹SÈÃPÍIõç[&0PUMìÉÁÚfÊ«£…½RMÇÁàŇɈÉMÜWŽ4¸žj¢›P”§FÙ¤4Îüi‡Gõ[vìÄFv&GÚuF@ ‹ö'bøh³ÀƒÚü PC‡vh½Ø?ÀÿRfÙ¢¡MÑ6N™+jc°^ë Ù`Ú¤6Uo>v6]“Á×;YS˜b{áVS1”骈ÀZ4|fh¶¤gæÍ‹…•íÖ˜Y(US)‚˜X»E•‰™…Ú¤m¾2Ü [ìÀM…¦ ´*”ùݘH]ov]z¥8ÁéLV›¡å‘Kyfšø ‹•[‹ÍàÐáTc€,¼ÀCëÔÎQd¹!P2Ä.-b"ÈÃRØFô§p‚çºþ„£yf—àïáRjFT:îV=©·!”•½’éÒká[l¥›SYºMp‡,G`PÌ$I°g°B|^£CeG½òÝúd/±¹í±ÍÎìøÿëí>ÞCö›° Ë(ØRt*\®kwØb-¢×S|Q.LA”ötÎÚ퀖‰ zJÐ8îb@î©üƒô$‚œ5ª³¦þÃnáVH1ë QÙ.UŠL¹QývƹEÛǼ…7H›6!R¥žQR¹“U…ïÊFÖõj»%ŸÔ‘£~E곦¤rFxˆèäê'UžBðžX¥G”ßùá«Ú~œF¤NýÄÄQ  ŽmãeRÏFAýîƒ-“å±0ÆÅVæIV¨d¨^ Ôc±L¦˜-Œÿ"[]TŒù£ëº®]*ß§¢ÜÝ|ÑdYX¼PÁ ŒñN°;¯ÿ›ì‘VX:•CigTÁØ·¥’nœß’`åyßÌ…i|¹ž|ò†°ˆK•ÑE»Ý’õ³ù±1å(Oí°ß,ÇCjä×eδbœžQIù‘äqãÊA.UTX‰ âv–QÈB°  dPK3×»¨±¾fZdN,´\~Ýùˆ'ZBDÀÆWAù€Ih¨¬SàýNšg&Ù^°³E[¡È@§õ[A4a@ûóYoÝ‚%ÐŒÅ,:Å,¼µÞ깞9:Ô¤’k¡‰hTA$¡ΙF}´S¬U”¹`Ή)ð%ÐÿyeÑ…Ò%Ü´¦¸õ(×Å L¸ÿ ïH5³-ÜÚ‚"ÏrØÌ]ê?€áO,]7Ó×w¨N?ÆÓ#á…v)è ß膌µ¾!šõÈÞ^ÿž×a!_99Ø‘Ôçæ9µ“Íö¥W[×ý¡V"âá®O„cq/ Õfel–«È‚è~›’ÒI~¶ÁÁ­Û‚aw@Ø`z IÁ^äÈèIõ_ Üñ¯¨t6ô´Õ ˆŒ6(îœ|!9 R(Õ.}Ña*óNLJ:¯IËùhŽ{QÙŽñwbpŠ•†TŸË.…ËÞ$òu·°¸KG£ðâ æÁÓ†ßb)W§s¼55¶ì†£íÆØj¤3NÿZšYSiÒ0®H!lȹ­È QщX‘4'Æjf~Åê·—mùNñwŸüC,,—Eõµ­ÃñÔŪhi=Åì]2fMÓ– VHæŽLËx°‚M·«ÎAPä áJOÄ æy*7¢+¡§ ·I™Å7ÉC›F·¥)S?9Z@Xå›Ɇ¥}á&ÖývåðAd7µV s#lNẈºž«Ñh—hówLc ½UF>TÇ2†WxX”Ëšœì¨ŒT(rÈu–¬ÂèNÐ4K2HÔÜM‚ÕY‡¢Áš|9Ý¢¡È,ôrx´‰.RFç$–úŠUvxÖÞÙR“æÜ0]i½^|Iš3\ÂæÐŸeÓ€]ÿê‚£—¨qîØÉùÔuæù(Q\ñòâµÕÃÒX,¢—Ë¿%æ´“ýBÀû˜lUdb-W±=È=Îò0ˆýØ‚U&K2|Ùº{ŠªâßSµû¯Ø½¸’îý’[÷.]»qíÒå{Ï/ÞÀ¿$pqbÅ‹7vÜØpã>rì°#•¬!ªÔ¦d¸gå qE‹&Lä²tC`“ d ìá:>þä #§ÐjS‰³µî׺bñö¾[ùñ¼yáÆûm‹\*låPkC­45܆L|In Ë¡í°¬‹¥Ð·B׃°Á” ~è÷žAz¬¸1¤ðÔF˜N’¢)¦™ðn‰†^Z'<Ñí<‰l†! ÆI75Tñšë  F m,j£“ÆŠÏ×@³¥ ÛIp†Qp³ÿ!f‘ã–XÈyK/å’Kî¯âz ÒÇ{"{ É$•Tl˜Ä €²|˜ò–=Ry¨%è°ð&,X2 ‹xlR¨!­n²ð§‹4ëÃÍÊ¢OÇX€[GâŒûk®åòÜ/<#NÌu £$j䍯‡QÚ0Ç—:úŠ"Ñ¢ˆE/§ ˆè`œÓ%øI•=¨ #ÝJ5$i("‰¢%þK°U¤¼“ðËK§ °!žTJð$ŒdbVð&u7m>¬Îë°S6‡©±¨Õ†þi­¿[€­’;YBÉ.¼„ìS°å¾ÍóGåkrÉtÕel£Ã¶!Ö‚h"kYj¯=Öqh¼‡""ˆ%ÿ2}‘?œhäìÖrʤ‹°Ññ··‚‹‹\åüòNpí²ë9„ª¤ Yë64Ô¤ïd:ˆ£ Jd߇’u –bò.¤ë8lšì>"µPŒ4ò@rü£(”2èh`”™%Yú+)Ø[•ŽUÇ)¤ÑÑÕTèû£Uµ±'aëªÉ¡6´ÉAÁJåL–T€ùEžb„ÓÜ!½-ÒO»íÞkݾû6Ìxg£ƒ¡”>ÈÂïúL(K ÊG|_ n¦ðê'¹Q€³jö¸ø¡F£8´¹¼é¾Øbż繣úÛ < ¡Aöe‰ªÆuñv"嫘)wÊ«?^‚3V’½®Yÿœ¸½ÐHúèga‰~Õ;®“ΨöêiMP"™´–t(qäÜò7ÑX< lÏ2:)T±¹Chrð¤:9TØNÕË%ò/ƒYÝÝ*v$¿IɈÅúГ>hwÁ{QP²чUg#™05YP„" ‘SAb)mh-؈˜snÉbÆWÆ’C—ˆ„K‹ÓÆM` ²È;œyI{äóDGqùÒ†Žôã3kÍb£Øƒ9H¢´$‹CË{Ö¨¢×Åê á?¦ªO©JRÅ!^Ê3à¹9ЇC–ÅÈCTù #­É,Wç¡ C´'Í,Ñ-íˆáÞÄe®BPO‰ÜØÿ]Ð…@G6¦I¶°Å¥`¤âj N#K‚´ðÊ:"R–s°?yHbNsp´‘ ï°GG§ùœ‚#11¥nnÃelÑBó´:ñL‰ä(kíP ²ðg¸c””Å„' q™‰ÈÁ*“b¹X&}6.¡ÀäLØãIÄKåIÈ ÁnR$¡5ª²dd:¡ÑÒ´á%´H¨áR"TøÏ¦&u‡A a;äU¾…/©k¨+@ºAt¡¿ƒlЇËà9(jà†„BKØC#GZ[{ðHPióJ…ÕÒ$XÑTëÏ ¦/Ù‚§ÕÓœb´ÒÞ1DG¢‰Å ÙÉG(uˆV&»¥¹ ¬JN) 7Ж’²¦$j®‰ê Ì1ki†)ˆ•|õÖ!òk!æëmPÕ=ÿnl3#ÅÚ6ôã“ÃFö«¥çâz»žLÍ‘eˆäg X·Ö-²³ÆÙÃ(ȲY°6µ«=Ìó¤Ã¸Ë2n˜þQ[ÃãÅx B§&´™ðv¥—›z… µbA+ÈUëæâó}@ðfh(”]6&¶4¾#ÓÑÝ#Dƒx>ÈOÖ³!N /Y–0‹m¶w#ÑÈf°Ùî(mq.ëoJˆž•QLáÞþ‰±"3½á@U8`Ÿîe 1LÃR¸ÑŽBa—!ßC?D•ö ‡QLÄ8BV»ÚÀ]‹11‹]l[8GÆHákOî¥ÿ´'Uâ B¬×=û¤ÂÒñ¥#}a¼Œ<ÿH O¾TA2‰æR(%6äš,@$`¹vD(翤XQlƒ—¤6jü®UiÝê{²à¾[˳1á,¬µalt°™¢X‘Œ¾ÞìYÎzžÍ´1S£`õÉ^JDMäÒ¿†²n†}Q.Ÿx$QáˆwÅú¤Éx=!ÄÂÓkƒ”~ÐUx0n8-‰ÓâV‹Ôƒä/D ¼*À_¬«€¸±ì·¿¤úñŽÜ’á-cƒ 0×Ñ“Th&oú¬‚Ò’…º ùÒïM2‰ÞPýwCc…U¿LêÐÊy§}žAÀf5ÿ‘f*rpµwC{×È6èÀ­‚ŒqN)ã¾,R ’F(vƒñiƒc€ ÅÚScCZ.Wqjî´a‹È~F+Þ•Ç¥ò[8üœõr˜ É—ÃrˆÅ×"2Ý||g»!c• ìáºÄµæ œcqF#}\À!Î+ÉáÊéf)œJ“ˆ<b“ƒ[ËÛÅ[¾ÚÁlw;·1ÉPv(J*helŒ>¯å¹kqÙýe¾¢¡žuòP¦âM•8Æø?ø"#w…êäèþ§Â0ÿ-Ã$˜^dŒì,"š¬ *Ee XJ¢M¨ç¯6ÃràÔNí0ìáõ IÌ2Hð´ÿè µÚ€6c¦«¿ì‹V"…ùxÆS fG„ÊÂ$ì³ö…FÌï6E&ªf&:·ÒýÖ¡(¬Kº ¡Ãö'Öc<¢¢Ž¦â¼Ê&r‹BB§ÂVCûèãgD$mlÁ"@ßRëCБ@PÕƒZËpCklf¢%|b¢°Ð CHÇs:Ï-¨Ø†CôkSvÂÞÇódæó6Ijh‚(vèE®ðK0BaÔ òJ&h,¬B®XÂÐäI4îfÀtDä¬(eGÊð[0âÿ éÙP â)cŠA€ëæb , ôŒbáB…^`˜æ&ˆ°v(‚Aîäè`\_ïIŽ€s0‚–æä„*²Ôæ·2Ed%`åhN…kÅØ(-XüÑžÎ`¦rÇü.Âü$šHÅ×ÄmYÔ àp¦yƆd €ÙÈÂúb”­i¦ ½æÇ:dá<ŽŽòf²ÂJ1é&ޱu»æ"È(½+¨¢ôÐÏw(ˆK‚°vìª$4R7ÌËðQ´qý†¶Ã]èà“Ì!‘èVÎÇ7 %þ)ƃ±¢‹WJê„à–i["F3 @°†2'”L™nä0÷B"Q%YZ%>$2õË!²‚’ìå)´î3.r'Þ‰WDB|Ã7lsD«rL4Q“Á“A‘Ä b'?s8‹=R$ §M€í¶oR  ÈR"i0ÂCF‰t6t2y†gåžpÇjk¢´ þá!ìtÚˆ±Xä¹*5Þh#t$€#nÂ%Ãô¦ Ãÿä"ÿ/a§Š!êdÆ4‘C[—+;·sÄb+Êþß,¢ÀÀ øÐhÊöð—°À+Üa ¼Â`b&¼tÃf\2b!–†ÂP´*ã*©²1Š ¢¬Ñaô-z#%ª#DB"|ªÎÓ(-µÍ*~TÊ’¥yæpŒ’>4B&þÁwx0Rð2=ÔçŸÎÇè%4)ª–ÀÛhÑ'~ˆRŽlÝ  ˜"öàõ_ÕåPÝåþ04·õbàbŽbÁ:ÿ2J#å‰,ùI( #'ÆBÎfZn¤m’ kd0‡,Á%d±t>êHÎÊä9†; ð`ÿs'…d-¨ ö Hmj#TF"š>g8$AXð&mÈÎTvé;í³(k"ÌìMD2'èW¢©o%"ó‰äEžžÄ]HìÔf£ØQÀ_ýf-²ÕL)Ln"Î*Ní²%7]›L ÁÂ*<ˆ"´†GX¨7ÆQ·.Å•´­_¸OÚPjeŸ4yÒ³ÖðO¨Õ/b–/^æ!lMô­|à  –Ƀ4#>F"Èó#²ã:ªÃlŒ7ÌDZ„mn2“v1†v‡íeE$ïÿJæibfišŒ,Xҽث;´†s†À WÍIcmÛv1xó0šÄTzãI~nBÓƒ•£ctd¶ÊËúc­|bGëÒý:L¨ŒîXu)8jú¨L2éáj'Yg[ùÏ-èä,±$z¯×âT¹J ¡’Ø.a…Ç_S"´ÓEoöh¹.N &å§ Àƒw"qÇâx‚Æý$Â|U¡8Ó凣×0T´oPtò ¯·.` :&±º#ZLø3x-$ĵZZµ,dE:X.b4„ß×(m©GŠí? V{dt@(š¦€Úb^d<¢l¥R1wÆ>ÿ$°ê‹ý¢ ±(BG&Fƒ¯ŒM%Êhòçhôcq© £îƒ ¨H-yÓ9]¦‡]Œ*ƒøsŽ/v•Ζ¦GhtB<Ç/•'.­ÕÂÊ4Y ôƒ%ÊZ¸¡æGC‹&ZŠÂýZ¥®FeCþ Ü…†×åQÛ¹gÃX1Ëf÷·zã<òçY2ªz2Ô¾Š¦@2i3ràP 6¹òW\'=ÓØvy€Xow†SæL5W&œLÃ( Ĉ*ÿ£…¤SªÞ@ã£lW¦? ùŒ.@NEÂŒ¤.E(¢S• › ‹ú€©Û™Äf#n¯Ó+ƒd©&âƒv#­ì£zÔq@Ük þK3êÀ«+ÕHmˆñ·OþóYL;Ó[:øÀ‘(¬ !ò!Spy‡ ?zLa'ÐA¢£ûæ:·¶„!¬é)M‚vº£¾\ff‡#´–­ÿw’³€lÁiPÐ]NÍ2NÍ]RÍ«û_¼Ã{²#cy€ øêlÏV Ød~6d~Fa™LNÇG¡\ Oͱ¹Ûo `3ü`»RÍ”ˆñÆÒ`Çxz"®¹/¥+‰ž‹KüŒÀM)yU¡e"°·>\Í`EÜG$J_ aåh`%ÛÎóœ1\œÏ€ÄnÜÅ»ûåv úMÿ%Z¶ë8€)”ºcúb¡ øÂ8©Z…Ä Z“™1¢©>*se¹s­÷fhCT.ÆkÏõÜÕ_}]žä –©µ' Ñ_”çy¹ìÙ#Èëv¨Á>}Ç5¶¯5ÙS,M(£j®ÿ\"qLY¤iP¶%…9µY3³y/ÜB3fƒ2V½*íá’a]ÜsxÜ#G÷¶‰X„uìÁ •5v1¦cRâs §³5ØIÆ=‘‰_ÆÂûv<4$Ò®Ž‚WUÿèdn,µ@=«/–.ÆlAÅý\¼Ã½Ü/þ1ZÝ‘VÍÛ@Ò¹JIò< a†ö/Üs­Ý ýeI¿¢«½FìÊ•ê2q»lÂ^ƱD¼Ârn!®êÉiFEß>MQæ'*sG$ê¬ý;9jd6TÆ«’Q1Þ꯾ÄУHWG,ÇÓX>”â0û`>!®+aíRjáRAy8°ÿ|oiþùcè]±‚빬ºê¾ó›y[k™>'&'m¶Á%¬%¦`â-cë'ŸòOLë)þÔþ|µC¾*ÓnYfx‡¦ƒd’éÖ!‘Ë–ü‡Ê[¿8äfï™y^Mœ WR„^ÃëBE3‚Ú«WíÆ;Ð6ÚÉå tWð6>HJT̵Jð´"¿ò£ßÎ5ILðÔTl^Œ¾ `ÒN.-òÒ‡IÅa r#«š…-”YŸƒýö Ï _tŒ™‘ë-øýG„úÔT;I¢€hР„ :|ÀÞ0ˆ+Z¼ˆ1£Æ;vL¦Qà;rü£jŠÿ¬T²b)²Õ®X¼b÷~Ý£)éæÍx’Äý—JÛ rÉÈ-! ©8˜¶tÒ´™§N›OkN½*µªÖu¿ÚíQ5„šlC§hÛC.‚P£gÉ !7H›…[ƒÚ ‘µ§>šxüëQ"àÁ„ >Œx°Ht|Ði#KέDòbÅëJS«UÍ’ÖÙZ‡vÏ¿!KÛÙ—ùjT«Tï­nm6ÖÍ›ãÁL™›rfI]²ÖÜvfcÝZ¢h·»C |žð0{Ñ«[¿Ž=»Æ9rìé#§Ï/`’ÚÅÊ×4+mÙ4Å‹õït¬uR[¿v}•=íœúíËcJNªÈ¡ÛYÚ‡ 5hEÿ@ÎÚ qˆ AGG<·vM§a‡~âEAT9¨âCdÀ "KyÅ ¶ßlìýK~6ª›j:ÝWߎ7Ñ÷5rP“ƒÚ( à© ˆ—,>ŒÒ+!2dHWnÉe— RGÑ&}çƒ"±˜ÆS>ú­ÆæMÿô‡_8®£f­Éô‹,C@9JÑ‘ƒ>¸À\8’•eèa–^> i¤]Ž4Ð>ü°Ç(¶Üâ"~pjõO›sÚW§U÷‘ªU>{èII´¨B]&¤¶ÞŠë•†ÚÇ^>xLU}ú¦Œ>ë#œ²ÁÖ˜9˜È(—´æJmµÖ&ÿ¦C#íàC—~7]¥FU¬Æ"‹îzß…¢µÃ(êͲ`‘-8Ä,q‹B4b>Ä‘u˜Ç<äÿî`!ˆNŠl”Y2E‡UÅB!#"ï¨Å.†Qñh‡a‚ ¤˜Ã"^3{ìêtx fÆ<âq’zâ ÍcYTc€Ø•.„ÈPÒëvð²TÔ  m\Í…+„$%_)DF²b¼…9ñYdpz¸ÀîD L/íN †*È~„”")g£(ÉhâQ…~la;‘Iw¤}pE¢0€sœú¥A òI!¹À Z`8GVBš°„¥,!A[¸Ã–±0G Cá9ÔO §A±cÎ…\ÈJ€Ãö@‹~öSæ€ åÙÀzJ3– ¬æÿ÷ùU¼܈<*½ƒª”0ædY•ªT€'ø C@‡>·)Qs¤Ò/la çIšøäc ë·Ow bŸ·|‡ý‘t®tªYÈB ÀkzB/R¡S§¾#î i*ÈClø4?½g£éV¶ºPŒâpG,Üa tÜ©xG]ma[ã^0@AŒ7–Rõ ë3ˆñRÐ#0ܰ…SñúŽD”T§Z­9×Yµ•n•¥\ý8Fêµ)^íªSw$â>((CÖ¸Ø6&êŽ5H ¢Õ‚\Mð1¢ŠtH#¬âðF,Þ!Ѳ’Cíð¬8^øÿÅ=öñíxfG¹ËVZ‚Ö4IMÄ<ÖQÑzܯêuÇ/þ! §þƒî@›[D6¶! ‘@ô¸P„?<¬Ïem(2«Stôs©LEu Ãë^—•=¥å­áê"UŸ‰¨¨lêa[„•î-„# `%E%·ùµoïëÛdÁK/±@w þkca£C kEÍ!"ùÁØx0]ŒZºnøµŠˆí:ÜAäºÆbW¬"ìú[¦¾³‚žCc+¶Å¾[óFðûÛ‚LïB»Ð_(l޾ö³¯úÌ«ˆo [l’ÕÚHŠulQLÂd©}Ö¦]±ŒÙFÿ×5ïókóº^Eì¢ …ˆ›ÙÌ:Å.ÎI3,Pcƒ¤à9c (–áƒ?ÈFy¦"tƒ\äºò9×fí }W}þË%…ô]ëšeöÊÂ’àrYýjŽDü#ɶ˜¶6ák:Ì×J6Èo÷êÖ}ºf²Š•@¬Ù—rahƒ%ð·èšãÀØŒžçËúÙÃZ†í]ÉŠïÕ¾¶É–M„]ëñ ¼žW¶è†ÂÿœY»VÚñîƒ! PP@1"áFݨ{ëíR‹\ Ý@«²j*•¡J>`FžfÈ¡ø‡*z,’úX›T¬¨=D‹z`C›úö«MGŠ×!cöÿ¯J·lÂQuÌcËW†ÏzáÃèø¸Cÿørµ)Ú‡ü  +dü¸ŽOîÅù8Œ¥šnC5a´ÕB·ä0Œ=Ìb F~n½å­ç|Kðľ«á]›t$ü¹}Žx£cqÞyü"Ú¦ñ±#WŽ8¬}`ŬPWdÜj_˜6†U¦¦1É Òꂌ!*€NßGÛôa¢ét}œgàÃgæcŽE5€ücxhÙUólj$oYËõÐò>¨]},W?Ú ¾–}lšiÏ£Ú³ôáË Uü£EƒAJ`TÃ8±¥7)E?ÿâ\ÿù7žTÅTP†bW¼—ÿA:• z'—eoü$o¶g€÷¡PRÐ%HZfyÈLH†Neø\†b{àUç^5~S×^”fK¸$d{À àbAzõG/QLГNÆ£UÑz©&{ðR´e0E#¬ ¶ÐNÿ0 xõ]fmcFQð!Ü0fØÀWÿ =FQƒ uVˆeQf?fmbCWmC'†â…×ôÀ0~ÖVm…p{Ë&mñÅu¥mEà~qï ·_6)&‘ï"&ÏSH)E< ðg7þ%þe(vu€bó“§O$èYo”õóÑõÿo8Ï•d”ÆZÂöZÔb–¥3ŒwitÐUl0ax ¶`!åy\ðRþµ,†ˆ\òr5n(¡žà6T >P>wRgF‰gæ_±W„rS¶0 X—ŽñqKÓ†„’…Wæ†ÔfwØc¾|5W…ÂçŽð±\Õ¦OðÑOÕö}ôèp‰„"f~JµsæçOÀ‡ï5tyha燈0ˆ¡„8ò§5ØŒå?›U3F»xAÚ }Ð ¬ ¥ÐPu!ÈH<(0%¯ ¹0¼§L(Q¹àgeC lï «è€ù†MO9`JåTF¹y«ÿpÖo†e…`8¥dÒgy²i^iK¾×y9ƒÄÓh·q !’# $A!ƒO#Ô@!ÃV¿€VtVø#Ö µð `Eˆ€› G}v†Ö¶th™ÈÖù_[¨…ÅÇ™·G …¢ †ëUm WmWm•™†afgu[_´0k 0=î÷[ƒh<ƒ(.`–«'q)—€q <•@’EÐDZ‘ÄSëP?3TF¡Ðn§u Ž P> ±0 ©wlJÙeXF^²9õðtØO©(xóÙWøãw(–ȆCÆ\½iÜ@i hÿ ÅÆžG ‚ði"EbðR8i< °qˆÇ™À œAµQ\äE+¤a4„?ªà rð tà ¡±à ¢QeÕ†^•‰™3Cqf‹g£IîPsù©¢?ê `H|À—…Þwmü4…üèšÍ·¤ß§†;g…HæcXhsÜÐ ÿ@®ðÿ0¹™U¦îG¡ œf‡v‡¡Uô1ŠQ W äSÔÉ ¡P ¡`›Ñ€ƒ×ož%lHl’'[æ°^‰§OK•d|VGY†?õyKx†KZ`æ ŸöcL)qÑ%iI§š®tZéa$Å‚¬¨§r€ÿlP 9° Ù ŽE«5™Œû‡_ø¥¦kjâ«"Wr*ToÕ@6C 6 y (ª¢ØY°¹£0:šP¸l;*†;*m–5|Þ…Ÿ9fËz¤G*íˆ@fòµlb¸­efI6·g†ý´­Îå„AŠ¢mð¡à úÊ?jðlð9°;í÷«6cÏу¾ä«$R(Œ„Wc @U¬õLÖDYµM©°§ï°¬ñö‹wµTYÙxª9Ø yópuE‡‡¹d ˆ?’JŸï°X8Vy*o«¨³~5?VV¯UžfYWxW:x—dK y¦MæÐ MKoXˆrg1©ÿ–4¡h§Œ/E +7»ò$mPhíp5­äE›GÞ5Wí°l…€n›\˪¢ªà­F:m¿—¨âG­Õvuéz °iuæJsNh Y: Õ ¯²P·Ø°¸àj·ËåH¹ð%[´¶†·7¹9™õÆfè¹ó6mö*hºg›^j°(§Ãe>pKc[¶‘DOÄ:§l%aHQl8%µȪKË‹–µTw…^}f6V+]eù\Ϋ ˆ;µûCs8[³'³òx™*‹^i´PÙT+[ž‹êo#…ÒuléHŒ[Ö€|Å ° = öK<5ƒÀŒ‹5Ñÿi’Q» ÅÖd&ZhKI¦ÕQ“wuèàk#Ukt öÀc`x~ßgšë}Hèšø¨¸c¶¥>ðjЯÏh 57©? ºö¶`h`ØV|òm€Ë6™Iˤc8£<Œ à˯úеîWPÄàjˆ=ˆr¡ã$zVR€Àntœ5t%Z²dGºKTt*F·”‚xè°¬¬z´óé¾: iº(q&o"µ{` Ð3Çu«T+¿’гʽòo oFxl|¼aÅLè‰löÅè¹¾w%›Hv•Ú´?ÀµÈxÀ±–‡ NÐcœ‡tUA< PVðÐW· ÿV¾æOæ]wé]hÛÅáeMútzupšKQê×AºlcÆ­­y{’©Á`&fº7 ]j‰é~Ó㥀 ¯,¤5—s5—½vÛ¨>¶…n;¥5§¹â _¬…Áä€ Öæ†WV™RwÎcxeå|ŠO×V³57“9° …YÐ29`%†òÉ´Fý/2ES¶é•Ñ5¡Ð—çF`Ët¶Ꜣ%WµL^ýÄOxÆÆª| 6 ö‹Ø´ZËk¾×ú¼öö…!5 m0 PPŠ“ÄSÇ90 ú“€zJ©z¬Ç0k³”¥½­8bmVTWt5‚~4‚-t^~´d"¦š—æx™·ÿŠr° ìæ®° C` {pµ/ºJnÇa*ÃsÄ`o¶°}º¨dIaÔÕ…]ÍG¸;Z»F%H=lìùeØðs:}·7½a7s¢¡ÊÙ:™JºW\—WTè ù‡»C‰ƒè_î§U»ãÌ;p¡Â(œ¥ž­ÂÞ0kt;fª`¥Z˜†ïŠÒv~íkÎd¸ÎëœÎ34m?|SdÈ·•ëšö6krP¢Ä°DrÐ ²ÚÏV²M¼Cqæj_m úÓWá‹K`u¼aæLÝU×}”QÚ}Ñõ`Á拘U~™§‚v–è€ÚmpY}5‹÷\½æ0zEßÀ »pÊà þuÿaú‡“þ5Ó Z«0v«v< mPmp½&`xz&qºFÕè+lÕ•ÔG­Ô†ep´#ˆYŒ6~·ø©¬˜ï ?.=S®–>Êí:d½z«çzpf EžÂ Î:«:“a_ŒÝ=Eab¤ä¨e]¯åpýÔeJtD;ØÒvW»W5ç{SÊ·šf6Å…Æ|{%nð‚+¦‚hƒ¸›pÙc¦šÍ°‰ù;p$lÚüè¶ Šº¤Nj]±-QˆVÓ~ßÌÎPïUW0Ücö&©` ©° ¡à C@ šŒ> +Jm%Ž0uà»0©7[áÌ+ÿ‚ÉY`%¨}a}i§bt&ž%Þ"Xªì‰šë镹ѥ±!ÅŠñy|©*¾pÌ E` @¡8)¹z ñßú Ñã OPÃ@JR(–gÌgd)²GV´é+¨è9¨$ýZQýG6e¨’pâ Œ”ªgy: ©À ±pçTÅœn1¿&ÿ@öÐmWne]ã…8%gcVÒj0· C0 ™ö»É@™À£ÅV| EŽY.T…œTªQ…›ñBY¼ÿjBÙ»šN˜Ý».ïv«DÚ'–·`| ådLG–IôEÝ$EïAZ›ûµ=ª±¶ãTìýÃΤÉ_Wgý1Õá¡`§-oÚ’&/o“30È̪zÔœ3ª:Ý[RËóΪò’†›A¸µ4¤HmyŠ›Dö¤¬ìi*•§œÑÛç j³¼]J»ˆîl¨n¢£®ŠpåÍ"hiãUvɨ[[fÑÖ,)4ÕáM?˜OK‚Ò’—ø èÜd ð\(Ú°…<Ä!_hƒíXG;: á´ãr#G¨Á7gøí(ÖE:°2{§!óÊYÖA.¨`zÓÿsD®niÅ# ™È\¬ÑBX H ‘Ãäà…È$v7À’Z·Å-ú‹J°Rf€4ìaÿDÄf¢[ÄbËGbÃÖ â<<‚Íkžˆ²ä B8(Â\uvtâG€¬Ž-N´‰HG|”Ž;Ø3:¼ƒkÒÔ` ]L€|ÌÙn ižêLgÃ(Ä,|` ¦>‚`\qI9PCÔDt¢“uð2ñÈG1|ù‹_Së‡$ŽÙŽXr³yê²7t„‚əьȹ×çr•›Ün˜•žaè{ ÍyŒ6›’í>¨ƒ‘ø“0%qÑž«ó"ÿaÎÔ¥/… ? Ó€—‹Qm«)åsÇøPÄ-rTjT:J^RÀ•èeÅ6áúaE¿÷<­tT’™¸ ½çI/O•Ë¥F% üýC‡p×.F5…X$_Áé¹úg):‚UX‰& pˆ"€Ã}à†,˜)xÓ—À¼‡/£:U©˜½DfM¤æ…Â΀a:¤AŒO!4¢Í±Ž­D'"D¼ ¦°¯¤Ì…ytåœÌ‘¿2À \º¢aî9X'ù«0 ÒÀ>÷C-üó © h.†P„ä"‘rƒ¤äF™2ذGdš»cCó˜GIRv7rT({›„R‡²Õ‘ž9žÿYy½&g´ÅŒ:6& ²©ð-+†ã<@²L8(s¤J”EdÇ{Fžf‰!ü»¨ÛÛeÓ»ùˆj/©:^ð–÷ªÅÌj;‚3mŒ§ÓìD5ÏóA¬–7•ƒÊ¼B£¥ fõ%Npn³¹‘ÝÑn¬é‘Ž"V‡!̇&2¡IfTGX ;Æ_ù¹b÷×Ïém̈⛠$¸š«¬8%¢¥~óмl¤NÁ¨{ãÏ«W‰ë¹@³»àt€"¹Åùš’>s,Å$¬)Ç€¸n½z£ÒÊt2bJýÑ‚öø•ÁÁ) =38Y}jyÉ;f1—9¼¿Ô zIŽÿºíá(ÔRE^xscö[ÌÔHNc,’æžÕRvÒˆÝî‚§¼¾+#{à˜h2»*Ýd†´dð“8 Ã…†=¤ÈJ#²ðì5g´"…ˆeÇQd}ñ¸Ïž'ç±ãk…B¢k³Öã£m±™PÒÖv”‚üµ­—¢uŒœ,zQudô2].””mö£HbÉ÷PÄni¨™ÚŽó’ÙÛf7V?èMެç(ᑯ;ãh×íEœ`QNA걜×Ð’è°c»îhN£a„<ïX‚Õþ‰ºÅ<:Òþ‡܃Ѹ m@•=baˆQÑ;Ï‘êŠXöë­t1D|É  ]\×{Ç:˜¹RßlF2š‡,v-aKJŽ»öxdC²Ñæ;×(Ûw‚ê"Ô[%ÐNŽqzä_qÈÅÉÐx†ðOM¾ –7áÜI›f§ :ÃN«Ý° :TCßO9)_Š×êׯºwA˜R»£‰ÿM':š¿š © f¼‘6iÂDºv^²y$gçV¾ìßw’š¸`y>Ø1‚<.²Eøfj/n¨›P€‡w!‹Ji‹†j²°p2Í¢•ƒ9¼pºr³M1Šª­²k1Lñ(3)&K™”ûÀÄ=ý±Oø‡e±‹P°5xAox“QÈ‹©hÀC½H¨¤{à:H‡‹Ø¹p&õr*¬«ªªsBóB³ ”„ ¦« +´ #DA‘ ˆ:²¸º1py¹¹ÊÌŸQ¨Ÿx;5´†C; ¾؉Û0º‰Ÿ0¸ld‡bкปj9º¯Ø³Ž%%³ŽDÿÊ‘o9=÷I0 90<2=3H<ÂÔJD[{ˆ×”óƒLœžÙÏÉ9 &¾Y ¾‰¯Nð›wï ·yãÔÓ ¾ Œ‘£A€—Øàˆl›¾êþaü¶óÊ*á ŽØ@-ûŽW$à`6¹‰œ=ˆœHšìø…Qj Ù¨øpƒRÈ]h7yµ‘ƒ] ’p„V꿉Œ<ÔÀ±©J³uh(¼B€‡<“¹$I@‹³†<ž{ž‹° N± gè”ß` ´>€1‡ää¹÷ó–:+ŽK©”zžDâ–Ûˆç‘ ù I:AÆ6a<¯nkBÞd¦Jrø…y`‹ME²GaA˜º*ÉJéHŒ¢()‰B0•]`€(€Äj‰Øñ^9Ë´L¸ 8̉¶¼ ÁĈKô|Œa(3&,5rPMÁ±½ÐfZ-A:N÷›ÓÝ­Út(‚§†(5Ø…úccX‹ÓŸüsÿ²£ ÍŒÄB”Sö˜­ÛS/ɯíB‘;åˆããK:ñ›j"X ¡ù7 JkÒ£dtÏßÔ ^ºK¬B/«Êͧâ¶mC&EzÍ3åR2P’¶òØKÔ» B½±1Ø€¿Õk¢Q…÷€IÁ•ú(Œë,Œý“‰—àŒ„)OÈ8O25OÞlªÙB@nð@9:ŸÉ… Õ³(ƒˆé¨ˆ> …¨Ò3 Ë`ÃýÐãиøHxEð`Ô‰5oÈ]Œ?°¨+ÙVÝ º‡vHÝ–õ éÓ%@䦛‰…y£‘ƒš¬@n¸Æ ÄDÔTI]½GZÔé샥yšúŠ؉« ›*I™¨™ø.„±Þ·®} õ$3íÿ{¦[à†&8мèžø‡œm±ªœI›œ$𔀕h ¥m‰Äò,eƒ4”Á7™˜4 v´‹å“Ž4‘{P­8ÁyÉ8wpX C‹f«RûJ9“Â'9‰Ìˆõžƒ‚¼ìá ™õ//Û®¨Ó*Ò]&˜ ŽÊK_P”žw`ˆš•¹m¹ˆ’;XKé–¶5<é)¤•R.©Úž¨’¦]Ú™à‰[¹•›HÙÙ‰$ùVí3%/X½ ÚФâ:PŠ9êÕNDŽÛèÙ0¥Ù ÷¡ƒa0€ù¨Q^i]j}°["A V|VD9UÙ¬›ÔZ5×Ú‹dÿ…­JµÇZ\“uàè™Á-á,®ÌY'Ò+ä[”5Öz¢‚À ™‰…¨K5ÃÕ?²iä˜âó 6ʉœå°)sè: 90ÎZ[3î˜&`xÖ¹ýRìÍæ0ÕZw¤‰  åå ¹ bÎZ<¬bpÇîý%Ú®{ä2íYX­„ UÒ[€±‰ÈŸ=Ý'¨5bwl t¦RøÊxg,u²|Á™5Iõ±J¹" ](‚pØV/Œj.ÓŠ’¹‹x2´³š…·Ú;µ²}™ÜE ä&˜¡­ä€7„öц :;÷-ÑF“¸º©BžŽÉŠúuÇ#ÿ¾‰@bЉ[ù Y‰©­9(ÆC.€1×dk¦DIÑ ãËqêK™‚ÑJeiÓ˜¿(€ë„Vì%æ9žÛ±ÁÎú¨c}ª[À®Ëdç¼·O|$³Ž¦`¸¨¤WƒÌSÝ™Iz®×Ü=3!æ,AŒÌÈcÞjçýê*ÊN™3±‡Äú‰Ø)€i&ÓÀªõ¤USª†®+B C&eM{É›2Y&€Ò"™nbžXnuv‰\ {¥ƒYH:Ðñ–Qñÿ¬HKØ’‚À¾³¬Ž=k`µø¹:ëÁ¹:ÈjÒ‹jÚ“¤úhœ]ÜhåhåïD¨É¨X‡íÇ…‰”ꎄ̋Cö”úí‘Ða¤çÇã‹„“‰.¥i›æ `Z\a ˜ˆM(T¹ˆ}ý‡ØŒØá•ù¢&Sº”Q¬ÃæSæU¨†%°†òc§¿ä¿<Öèä=UŠùHšma^Þ%o^š K(‚R`çÜÔCTaÍ5DÊhpJ¨Cü÷³ŽRë çÈѽHß+ÿ,<âFíëFÅDYÌŽ·íHz‹;ç Ëá#ÙÈáàDa›£º©eBnÿ'Õ y¤šy”\è«Sògæ²ë윳QZ0_{8xrg<¶4}*Œ,²bÅ€‡>ŒU]¦ê(f¢Œº*„–Дڈye”P ˜xn Ïð ÷õ#¾•—`°²¢ «î`;”g)=S;Ü)({Ї}ö2G c‹h®;±‹Ú© \Ö†®ê1;íQ‘z˜Pt‹·A©Yl°áƒøÁgŸO>s‡Šx9b‹ÉŽç¼p¤ˆ–†Ø!oΨBxªEâ×X‰KKj¶i>{(×â$se…6ÐSÈSðJ{ñQOŒa?¦¬+†cо ²liBIRÿÊ#ÔâÏYv"°„7^m0ñ¼CÀÃ^c6'¯’ú¨¨aãé\„ ö€¼š©‡DJ !µ0§¼ªO„N³Hì;O„ãê9[Hœã0½»¹DØ ÜÉäï[œ½ÍTÑã:eÝе¶´X+y7Nt$è<¡Ùã …hØÛ¡©åaMŒ¦¯\ÛÓ9æ«úáù€C@<@VP3óÅÕ|°Íÿ fªPh¯hÇÉÿÚ&S8¹…ý¡†"gÐ7SHtPH{À ~¿®\ýùV‘ƒ*X“¤UK3áÒt~â%V  *ü»N€‡ôØ@Áò†A@WwŽÿ«tyvòQ‚P¨³>uÀ±¹Š(„딑Ûî öaþçëÉ÷_;„MßïçÂ/|¼o¹”Œ€PõO•·6ÿFy õ/ºTÿl½³õ›;qÿĹ“(Î\¬‡îý»•«šÜhhÈ®QÜTq“EÎÞ¿_ò~å‹'¯X¾uEƒ¶+&ïV»Díbµ“S-Ô¨6tþȪu+×®^¿‚+˹XäȚݣ-·PmÑÙ”ÓÐ\ªw±è¾“ÅmÐ;œ¡ÞÉù³gØ¿??ÄìùãƒÒ"‰wðÐA«  0€G8P€«6¬Ú¸ÿ¢S­µPÕ:YëtÛšÔ6Þt·A·ÇÄDëÙÊ1#ºä“'Zþ<£¹_çaL.®ìòTÛÙjî.–]ŽèîÖeË[ròwC}ä(½yÓwcUäXqü~íe›ŸeWF&ÌGÒ½s qF' ]pq#‡€uÙ"~|9' uÙ¡c ~í}ô`xšd¨ùðš789ôÏEòÄs”Q1ÞsTDE”O¿´ÃcZtØ–CùÕ?{”¥MÜŒ2•7{x“ 8ÒüA „ŽB8õ1+r ´‹B{XÑÑ?†ìñO,¬ ñ³¤YÄ`ÕJ%¶”KDÀ%?°’C-®ùÿÆ¢9²hs¢w©B×MS19Un·“Š–é÷Ð<Ù2OG’l’;¿ü³ÎGÍFaDj§™ª‘;‰sÞ?}ØJ¥CÒpCëx5tGÿ×QvÄÎúаí)ëP…¾Âúë-ÒæqÿÈ2©·Ø…-:Ýb+FÆ«µ¤Ž{Q²$Kµ?LÖ’,óÃ,tx3Ê?©h#N;3Ú˜O \0Á5Æ(PBÙr X±Ä^ýSÀ(r°‚ñµ©h['ÞÈñV(C+> Xz³È1L†Î¹ó#ä97L¹ìáȧ•VYh£qÀÐÂÆkÕŒ¢ÍpPñ¨°<ëÈÿ#ÉP=þžÕ©$™Êm³Õv[CîD—¡uýbN"ØyšŸvÜLG3Øßµmß©ÈG7ylýe÷;ØXH\ywÝ—_]èñ‡_væl¤|â‹xƒˆ÷áSÔ‘ç`}™Waãã!®ÌVGݸù­ΩÍé³tùGäød”ìÓ~0í@!T>D õðÄ¿ÿŽÕÀ@;Ü‘C l¸’C/°©AŒ­1CÇ!`:îP!ÝB§fFq:¬‚5‘K›rÐRŸšpÈ´˜²*ÚØòïPGÅ8{Âøã¿íøk;±à†4ª‘Š|Õ&Έˆ=>„*cMX”È´ ¸ŽRµ$ÿ’UG Ò\u¹J¶†Å7vðT¼È;BPD"’àD¨EÁaaê’Õ ;"‹`¥ëXéZG¨ÌµÂtÝb…ÀÖ÷dqã*öøÖë„2;Ûa±vZÌb< ¼/i8ÉiÀ'Ó –C†`‰Ègp"]"Î3 ÕÑ9 2V;(D›bb0@ `‰üa´0Ybw¿ýÕÈ(¶“¤îòW”§ÉC‰"‡ÖB‘jÈ%æi‚>$òÇT’‹…¶ ÇœDŒ’wÛK {UË¿ ço{+ ∃Žq¡cÜÈ«=/ÉñÎ}Þ! æX':w©ÿ\[D3ð¨SÖ±Ž*#R–Ñl”æQOþ‘1k¨¢P%³èÎ-Âa^#=)†ÆËxA4(ƒÐ|° T!ÿD.bÁŒ¥y$M¦Òa«J*©ê{ÀP¢µÀÔ@<¬´À•MèÀ§µcíŒ'í&Éÿir€ôä(h)‡pk‚êꈩ,²Ž –êWAÄ¡NM¬ìMÄ`ú¡±šsY”.5„a ‰Õ­ÄÍ4ª;eÕ©˜Su¥Iù: ŸSªw$¢TÈÉ)C¿g.!&Ëuª°‡*h1œ>”å_{']IŠÅyÖ3¯Yñâe2†DF 9€Ó0†±Yñg\ûq›uÿqGNR'™ö ãdÁ:X¢¬ÀWGeI?ÂHFvm$ûwSlµ”Ã';1šÉRnÚyŠ}ÀC ÛBÅÈñœßžõaZ ¸å^NòÓ=æÀeß6g¸ÞzN9²¦àþÖ·4© ï°vÝÒ‰í U—Â#:Æöñ–³lÃ"e¿‘Ö5¾£õ^ë뻓œä Ø6±‡6nBsûºV%:*u±ê) «ÍÁ“p „M‡*΃¥â"%-‡s”’CæÀF¯( 2xŒÂV1T—³~EþÃ@¤2â÷ØÅâ‰x#„ÂÙ µBK/YbSù¦ÿªkÉ¢Æ.Žà}hx¤:D«ñDmþ…8#7Ñr…"ŽnC©.¢`µÜ•ŠtôA– ¥Q‡ÛLW¼ÚŒX9IeŽƒ'äà©F,n‹]Àr:á™sÐf ‚3AîÀÂyݱ‡ˆ¨é†¥Ã\^Ê $ù+˜4©›áIÉ„UM½ç鄆ÐÂÅ5·?fëÑ;~‘¶›z#½Tî,%d›¼US=Ã=Os‡»·—?Þy±;ø–Ìé n<¼V.q½C7øÐmp¤ÆÛv§‚©äÍðø‡4È!ù$yèðD¯`—”NËW¾Œ³^±ršÈ\apb†I5C´Òt\ÇµŽø+Eÿˆï{ÜÊêAÒK¡çPOùßM-™n[’òH·~HP ø7lÍ•’;2Ã… «¬äJÓF\¨¥}¼¥X: Bø¦ú0X|s¡RÔE<ÕGîÈÙ:Â-‰$Y"ÅŠêÌŠÔ'ó-MÑÆ±CœÑ+‘°ÂÆ‚t­la:ÜÄŠè‘îîuÒ™ÝÁã}ÈúC‰½ã‚²ãEHWç¿dˆbHºº8HÜ,ªôxd™Ú³`rÃ_çìŒR¿í8¶Bc‹„Ò©†ß¢š<Š=œ¿ ÃÛºl'nü‹n\ë±jËE×wy´q}ËwÖöñå]ø¢· AdtÉE‡jÝÑmü¨vÿÄß$œC&m¸Le»ª‡cëb“=ää,!í:º›O0úŠŒðÀðþ ‡^˜,MO.p‹A2-YÙôWÀè·n¾4!ˆë'bE-ü¦Ps¸óáiÅ¢œÅ6ÿu,¬dŽ=X‰–aÕ ´ˆŠÇUÇýÜùÈüƒ'B(•C­t‹Ë] ²HÀÑÜE™­ü:„Õ‹Y ¹”UQCq’‹(•‘MD[ÄTØCKaAXŠƒ8ÅÕßàÕNØE_Äüƒ¸ÔÚ­-y¨ç8VvHG=à‡»$™4H{|K¯Tƒ‚$Ç?|çÜYˆC&åƒ8èÿ%ÁW›EÜ%ÕÏ´`þɉ¹Ç¥½ƒMüE±4Ç0 št)‡‚„Í(H!\^Œ^°Ewy[HµÍ\-Õ!yС. ×{ä…|À…Sëdù 6è¹ÃM­J;ØâìÞ¬Øm1^µ)"kÙF†A$ÌÕŽ›̺ áÁƒ-ÌB*øÙ.@ժ䔱°“I”¶4 ]l\*Àƒ»ø\·TXšéD†aƒ‚ÅÔˆýßw ¡þÌÖU²ñ’ˆ… q؃"È[ÝD–@º\ ‰1X™Ã%™@üP—x•U`•)„4‹4Xƒ R9NG8HèJ ÁX“ÿ‚9Ô¾ÅLN%˜L›= `ãÀ‰u‚úõŠ60.Úb]£Áá.I<Ëâ“w¸M8AqìÑÝÙÅ[àp×¥U¢ÔOþ`’Cd¢î hu£hmýŒ%‰#&m‡«…Y26‚Îå7|×4YÓêõá·%‡jA^å„NHÈxùM&Ö’„„ ®åÕ’vEäÕE!TÓ…4áÆr}Ó5b„ü̓‹ˆC(þeUÄ7iN±‡xœÍF0Äp°EýØBh¥$ÌOðOŽQÔ©°$ðØÃ Ü‚dþ’ éœTÕX¿5ÕFÀ–°UA Xn˜X(¤ƒNÞÓÌò¥Ë éžÿ¿E7ˆÿ,e§8ža&MN¹Ã÷ÕÃ÷5Ð÷œ@ ÉÏØi¢`“aحЗµ`T­CS©‚–áàBľT¯€ [Œ`Ë=9 O‘Ë…Ÿ‹˜Ê¾é[N…çMMÐ>PD­¨R=ÄŠÚ N,_eÖÀÔOĈYH ŽìN>øÄgOH&1µ‚@é@Dr‰¡}pRN2Þ€Ìmä‹ßÉÂO„§©LVrP¿hIœì§RžVžÕŒ¡~tD–]ä‚»¤Ù£½ž*ò[XrGëéWâ„‘Ò]€ E¢eèF|WoTÛwuèÝ!7hN0[Nb8é\Fô¥ÿ÷â(þËwÔxbr¬Ǧp#òej‘f…¦íH> ,ìAAEÅ&I¦<„…þN2 …<@F¤Â>4YQä—}ຠ•8äš×r¡ƒ]:È-g2ßIY‘9üƒ7 *nGÙ–!;á%ÉHe^ŒÎM=L)§$ BtÉ—‘Ë®œf¤^Ë4•P—H°ÄgñUÁ bKSQšB¸ÁopÕ–,W†KG˜#ꋨÖE´Ã Bê(ÖC̓±“šj‡Œà¦P|˜Iâ©íĈR,L> Œà $ìF”BTƒZÄ‚*€¢NŒ¢ÚÎä.Õ…ÿX&^ŠáÛ„‡ÝDI\™Tä–\±Ù§™V&‰¬íÁx”9ÊÎè:¨,)ªl£BÖç0t9Ç˨b,°N_Øá4Ñ^Ý`â&ªbÞÝámœs=Z⦠é[”ºGÜÕ#­©Uc“b诀¡LêÇ üGæ}GUÂÌhå'ÿЫ-RR¾ÆËôÜÜYÍi$ÏÙ©‚ ,‰ÂÉ0Hè í-¢UXÝE4<¸…¥¨Âx`‡Š¾ê-^’E„%]¨Ía&‚ʦ¬âÜ*èÜjtdGº‚öjŒ Ü=zËz«R}H8úݲF7xÂ@xƒ÷ýÿÞ'E]ÉÕÐ Ëx zÔPQÁ‹¬È§=$Ç Ôjé–ÛUH"Ð*êIÚí8Ü-¸íx¯&ìž]BŒ†¼€~%ÜÁ€B¨ÂÈÂôù-‘ðˆRÔÏ ÈRæS±”RtÐ"œ:UGRøïÜbHÙ³*–ÝÈb=/™NSÅJ!‡¸Ú«ÔLJèêGÌÀñ…ƒÐæHÈ-ÄW’Ò´LA‚üÏJÈl_Ìx)—v$–·Q—Ròì(¼ÃUÊ$wÌžëüÅÄ:DÄÐb‰¡M¶ÇØboîÔ+åÒâ=±½ÌdÎ_> ž£ÚÃþÕJ,ØfT)€ÉôøÀ?Áÿ½üCˆ?UF>e†QW30L&¾¦]DIäùZ†–^ëíV] ŸqqÒSäƒJÇW‡cÁà‘‹µÝwÓ°â\îl‘Çé›ßL‹qŒNrlO’Í’[ÞæÌ’©}ò>TÈ/(ìÉ,ñN˜Z.%‡’Î\k5I(XCG DÖ5n[TƒtÍÇ0b”È’xÔÅͦMI#è[ßÅ q©â¸Üs1µˬQ´Á.°‘pžHe4sVÀ4wW$øÈWCVCÎòšfa' âJÄÌÁÃz8Ž"À޾Õâ:׈_^‹:oF4µÕËG~Ä,¿õ¾XO1د$Y»(ÕÿÅek ‚²B¸‹¯´PËÍyC—¤˜NlÿЙá— Õ?¨·Šò'G¼t¯ôŠ9¨ç×0Ó¬ÈÃ=,$5¹IOÒbÆT K §YyŠºÀÐÓÅm È=ø€é×I˜ôÝ8W$ƒ,eý˜¿XŠËÍ ^èïZW†¼PDØ¡z°ÍY\’¨>\ÂäßFüe¥;Ö­VˆÛUÞmý‚”¾Ò&ÞcV6¢V†ÑÊ$X1‡ÚÁ êmhràÑ^{ré¥QÑpH„ž·î ð¨(RÞKkƒ4¬Åß…BjAe¬rZis»—Í]ÈE†uðH"ÔÃ{J¯iM]`L CÿbÈ#„zMgÆPŸ:Ž* r„“ì¤Ë}¤Ì‹¸… Í'GæØ;HÃxÈ•Ôäq§%Ìû,#x^ç;ª º˜lò—…Õ }_ ¥I—%¶F°júœY]Ë)OKš(ˆCLcH(¶®ÈÓéy¢4ióŽ€”Ë~bÖÇ*S::i©è7ÃöDX´‹2C Ë ôõ½œPýƒ"ù@/˜ÆNO|Å£úªB(ì½+tBÆ$Ä@»Å¸×_,Óÿ:aˆN]ôQ»7ú.g·›:N"pð<†êÇkûnã÷1&‚ÈB0|ð@ QÖbQ¬ìéY@D˜«ð`¢\4 ¶iÃÔSfÿöūpâ¦êû×¥­<°…¸Å‚:iÝ-&†GSçÄÞ¦>Ñú»¤ÍB`Ôðýâ½VäøOòÔA¼‚´†Á%>c0©‰ÌkO!d*ÄvC¼ƒ*E®J¨ÁÒ}Ô²š ¦#óµœ @¸³õï–»XÿÄD¨›¹[ÿd™SÑÛA[æ&Ì(páÀ„Øþã˜Ð£BE G¡SO–·ÍÙj'._¼|ëòÝ˹SgOž?qê zsçPŸG"Uš”éRŸÅÚ­kË\*t©þÙB·±äÀu ×Íûõ/ìÁ“XÅUý·§"Ä­ÿbqKÕKŽ«€ü€€o_¿ÿÈ‘Iœøü+JC=”?Ù~‘˜ªÀÁæ6²²,Rœy¼š'L’:ètBëª Gåªtb™e?äØáaµ0¾ B@¸0à!þP…œTÈ‘fXr1È›Ón39t4²®G[¸ Aä’뽘äá/¶›f¨*âYoXätÛÌËÎÒJÐ7gudnÂQªéäPª}gÏ«‡$t¼­¸v‘ˆßƒ,„·ɉEJ¢MTâˆ)Öo¾|Š¡MžíÁ»DЕdAÐŒ 4Ýÿî oÉÒâÊ­ãÜö¨ 6d‚ŽWeÍ9gù¢ÀVÆà GáF–™ä‘JrÒj+E²Ó…€¤žX¬ÉMsöÅÉ>¤†Â ›†—UKÈ—¢³¶:ò²í.Í®öŸQ¬édnkB¥;oPƒ¤®}º"Ⱥ^"èÈQ¼ Å›Q´DžA/®Xò‰)¯Ø¦ËßÙ:xÔÆôŸÞ6'HŽÌ#kð¥3R«% OƒG•­(Lm[ ÓÙvE¼•¯ú⢀?ö §µÖîqMÊåRËí·fµ’I+’Œ;¸Úe.iˆ±ÿ'[¶55‘ƪ³æ%™JãRKËÂß.ô8®=@­ÆÚÿPä¿tèmÔéGù¢ƒþQœ‚Xè\CG¨á°ÖD®r œÜ-–[ÐÆ ©‡-ă™Ï: ó¢7¾ñLk\íÉM( —X*P}àÙí`X¢ZñåP‘%š“| '6ñÚL»„È 4S+’¥.dÑØCRò¡ÅŽ'šÌD‰j¡Òœ²t‹wqRn›š¤¶ä%¬Ä%T&tËA á ¬¤"qw+£Kr¤† D‹{HGÑT1ìAô£Nž˜±båÞ‹¥ÜÑdÅ3XH!FɃ˜JN±P#<¤qtÈ‚2ùÅ-€CQæ…€É@žàVü"¬ÿôZMv¸Cm˜pZ¹ -LJŽð¸K+£YŸ-©"“b´?°\GÒÈá¶ 9ky+ü¹–é.àÄ$]Í û0t!r8ç7¤Qž9ÊukýƒöBOn4"0SAGXŠhÇ0ŸØGyþQbCÁ`"Ú!gAuºÉMxb1v¹C*áh’Ó°ö}37—±Œfª"¼[Œe”|±Ç0x†Q½w|9 °‹pcÅì!Qp"v¨ìþƒò Mee¦‰ð\gÉ‘­±‹(O<©r¨"©X0ÑlGJËKÆ·\)A£_QiErC‘ïáR¨ Ç%¬¨ÂvCœÝ°A!×-Ž…hÿJé9Oµ"ŠQI«<ú0ªv± NæXG·Ë…`ER©°G!N%Š8d¥´ip6Jíµ³‡cKTÊ¿¨(•³…<$QÌxJéqòsRQ>j†ç$@üµÏ˜üH.ÄJã3›þ¦G›¦ò¸ñ̆¬¯–òâgÞS²Ñ('!Ä5ÎTJö’Ž%KH™±JþÞщjè¯hr`Ø_¹Ví¦•)¬´I1$" ¼Õk‹$ Ínø‰\刃2“xj³Ì†–3mGkàCÑŠþ#"Z,kÑ%v†àÀÏ,áCÈ„K¹±gl¿˜§¾"º¹.²]öˆH*®ÿç5dJÅaBòVZ"§óµMÙ¢‘¤&Ž45DÃÆ1è¾¢H¸ ¤a_TH{6G·NÀÉ[\5ð 9în—ÉI¹ïL¶©’ĹNnBÓ†µI˜n :zH·ÄáFb£"W+óiÊjŽác %L‡‘XÂHÖ/·2@þ0ÁaF,ÈÄÆ,«%âœ÷;åx†x¹pÖ•SI¦\Êf•ÓÜKÐ(ÜÌÍDÍÿUp3Æê 6¢Ò¨” d ×z7èxz›Æ–âðêV4¤ +@ýb/xf@ wú¢VnåÒm e­/O^­HŽŒjp h ÖEpÎ6“¦8ûP9>l:Žfê_¢E*¾gåÐäFï˜\©4:Œ“LEnü榫ö¤ªóJÎ&O6Ç*"ÂÊB"l|ŠC<¯G8û°Ï.ƒ(lÃŽ„Gøjptd¨‰%@…è L7¡2ðóVRjÅgT@ÙÀú ÜüKgTÄ| ÏòQ~êºTDK(/AÚ^¸TfF˜ÿòåòÔÆ[®³Yü§ñ0ñ•.µ< Ò‰>ïi,ð{¬bB:C:®©}øNÐŽÒŸd¯™mÞcK‡kIS”ô¸²•(H#G*¡E¡¶—É ~‹õ( À ÀEP /J /,`N«u0 C£XòÍ–/Fú@¢Â¨oiÚ£%èÀU.¬‚GupΦaâLò¤c€Áò€"¶”¦K¢iƒ<Ð#h>8#įG¶!æM$¼‚!ÔHTÖh©ŠÊ".tS4ŒõôHå°):´*$#Ò â-t$Ì’è g”Î#—A¬€Y™n /F /Δ/¨5fã´@oç €öÿ@QrìAo´0c|ÒåAñiHì×2ã¶J7"x+7TŠÀ   €|ÀÂÍD(÷ˆÝìVŽàùT ~¡ì.âœ+ áH4§oº,#Dfáf Àw‚¡¤à)þaŒY/ƒCÞä„"á,8",J"ªÆˆo‹¯ŠJÅïzx¨ßÜ-[à=¨¤¶¸GÕ•½´[Å4q?ª|³žø'Äz¯]®‰= 3â‚9$u9tCdd*´¨¡nI8FÚ¸ ºc'HcDŸùv}›Q–ƒ Û _BÚ`Ú  `~àN•ÀÜTdeoeˆÅm³å{0D$MKÒa`Ÿ¡L†ô͸*Òa`íáSÞFNj.:ÃùBq]Ñ d!$¦·Ç)^tcv¤- •N¢¯èÍtéHT•Tö@üÎÌk£.¥طÃõÐA9s€Øà|€¶4!2ËÎÿùg$›/ž•/.ÛÀÚ³‰ØV4{¾p}%J!Þã¾—÷òÅœ)³&Í›6sâŒY,߯vr†ù8à\(€S¥NQ8Àÿaª«S#LU°ujxö¦ŠK¶¬Ù³hÓª]Ë6-W§WVuÚaj »XáN @«Ó·K³–:€¥†Tqƒ©Sæ¿!K®¹î¥<[íl‘Ûƒ.•¹PèTU õÎs¬wë$¢Gî´8m¶Ü%’hΖEt·$¾‹Í›\ªÝßÅâö;–¹’¡Ž›3ÎR\¾Ê1Ož™r>IÀå’CÀ“£0nKÞé°°åÓ«_Ï~=úS7LM1õFýûNíçÀU?ÿòd3ü±<ªx‹;’=Vu¾ÔN!ÊIӃĥ£Š5¡Øƒ :Iô-æt„EÿäÖPn ÿô8&г܉æìAQ‡Îg6Ü<(NK/=7á‘öôK>±˜ÆÂT&à%W^ÄÕWWyV{`†)æ˜c1å”_[ž9ž€]:%SU:u—^N ü‘Ã0tZfÖÍ$a…„Ö´ä:äð–â;²˜SIÜÈáÍ(‘ ·œp¤oïü"›;©ýòŒ‡âi¹‘ 7¡@š 9Ø$º’<=¹’¸F—OOÅt§ç“Æ€WdN•Ì?Å&«ì²kÁç”|NÑçÔ SÅ0Õ XZqûß}ÁHÄÐáÍðÈH´)h¡…ºOf eFÎ/—Þ²œ7еÿ:Š7Øc :‰Ì(܉Í8Ï@©½hâ-»µXÏ-ÿD¤H ZÓ‰7¡ŒFÎ ­µck®¸Ž\L.tôáƒ#9 +xv:'UXj‰&`€€³<÷ÌóÎf†VÐZ1e |\0¬T\ÍLXŽÁФ©p3ˆ¥ž ÒΡ»d$¼ÕUÆÒØ-É£f¬y–6q¬zÓço§®V*ÃhÎl¨ºs5Œ$ê=ꢔºA‹¥´H(¬¤BÖ˜¹$‰‘·ÆûÜ-±È"‡*Cl›d“ŒÏ ‡Î,ÑXÎ µNaË”„ hòú€­Ó®Ašü0K樲œ;ؼ3<±tVÛÖ/yÿ 6u#3VYuõ;8D6žou륂ìˆâR¢Œaƒx™ËcÎtÀ´6c åÔÖº–L\aJa‚?¡æÀm`…ªÑ†jÈ8÷z‘~=lTÓ7µñÍŒ‚ÃÄ'žTdÑÓŸE!#¶]ÑJ¿ÅqÞA£Dp×£§ÚÍ¢TÒ$VmÃ(ÂB»Hšî*\) W‚e´ÀЗMø {ÿÎóÚþúW-€Ñ[ž(ÁÄØ+ž8¾¦0º7œ×¼R³ã Ä5šZk2™Ê¼VH^—q‡,FƒŽIŒ]n`1LqöFRE0 q Ñ®?ø€"S3…ÀuB§Õ©Z§˜iÿM²’Éò¹³Äö¥¬Â}0‹TÈ3¶€ÍÖÚÑ“˜ð0:í¸ÇJâöņ‰‰Uuñ:Ýý©òHsÕ´[¼”Z ¤à yAÒ»wÐ",@a¤Â¾°“s{äœ~Õóþ.ùÑK€§b'¤¸´ÍTÃ,ä`‘Ë@·Ëa£¨eh4=Ï ÓSI›ÛÌOÉ‚£X Æ8iÿæ„éë–¥I—9úÀ ]ü ˜$ÐU4­©¨ÀØV’*j‹œ_w69ÒÐŽ6Z‚eOôtm¸Åª™Ñ‰N†e•æ?EçœUºN7œ"kT­$Ã)ŽÕÄ[ų•4ª˜…†1€' ¦†þã¥Mðh 0bÊË~GôA¬?1£-ð¶!±Æò(èpÓ½êšTØêJEº@²ØŒà˜¯–…=blUÐb›`@°+KlÛ)7€éø¢¥Ô"šXï,¸Ð‡4¦0%X?ðÁöð‡Aâ'‡’G¡ c6rØ6Þæ¸Ö—½_pC4TÛ®g~c¬±u­6ŒwdÊÓÿ¡iÑÊøÐçNp$;esH|‘UÈaP&‰4u™´f“ºÖ;.æ_ÈC_¡ÇGDNk{°˜A¹ÛàAWà®ò– €™í¼fÌΙ=‚N÷Ö·>hH·¶d1`,!oVü‡d2>݉`«ªÁ™U‘æÝï@gþ\€aüÀß/ ¡u¾¦e±ÖõØýTîk…`…r™²úWðX¼ú½,\ǧÂ~mUˆBáŠ6ô â_FdcW€(Ð.XöÁ¤'-ÔWH Dd?7«—} èz$ LiA' FJÕäçG]ùÐ{èö{ßV'µ»`[ÿà Tj÷./3h23|‘3cr} 8ƒÙ7,²W@>à ±0 ’à–néçy¥F>1 @ ”L°CY°C ¡Gs2€S!ØsÌæ@ Hƒ\8ƒFW;¤'â±À fôX½G„ÔÁ?픳MD}2µ4â^{Q}b²T]؇ ˆ64´@eCàrài‰WC¸~EX$+“ß‘LZ€ß‚cO1ÉÆskrhBãN臢Hƒ_8[ÖÆSTöÚ†{²†ŽX!•±~Ç>Ðæä‚ØNpÇhÏ6оHƒAWO‚¸A9P rðmàk›öè÷Šÿ¸2q¶ mÁ@4,£7¤g…RʼnjÒÍær÷‹â؇AWŠÀp=Up ǨBÔáŠlhŰ5–c>NoRYÞXtŲ…ãø£ˆLñÃrú”|§'½ t˜1ƒâŒ4=ƒ›ö$d°HS’‰r’‡W˜‹Šæ2"9ŠvW;ÃâDca$?o¨x_öH+\v÷Zz„TýÈz#¹“¾˜ ¹v Z°và(xµ0©~lä;Å2s(%T‘Råsø•h!É“X9ŽA3,\ñð¡}PÀ€Jâi˜$F²›F>¥9‘hbò@:™•v)ŽÿÈ‚N!_y·HÉÄ ·W6\IYxј Á[ìN/d‰€U t½x—”)’Ȳ•öµ}àñr h£tCúƒJša Š ·pG6ùsŠ•ùš N1,N‘p@L‘LœE³0.Áu×Q$mT•cF©€iŒ šæ„@Ë™8#™°w‰Ç%µó$† ÿP­1 {p Œã–S£ CPT«I›Ÿ¸‹äŽÒÙžv‰“¶‘Nq‘DñmpÍôu‰øÉ2´pçt@Cv€ꉪW—î™ Y‰ f,ÈâÃòP;Hwr©žlq• º¡”tx§%¦ƒ,¢\‘L?FZ”6 Xèr©3 Ê¡.z—-jdî”&4º¢‚£/š£ïU|t3cZÍI£ž¨…:Z¤:™c£ëñHj¤NÚž—¹&€Ü(¤ÖI¤Oš¥/Ê ÃÐLª¥`Z¤"jè±NWêðÀžaº¦/ú€MJþȦrj¤Ô Ÿ|§sš§N]*xª§€ê¤÷§Z¨Fª¤†š¨Šº¨â;mpb-1.5/doc/user-tutorial.html0000644000175400001440000011127212315325776013347 00000000000000 User Tutorial Go to the next, previous, or main section.

User Tutorial

In this section, we'll walk through the process of computing the band structure and outputting some fields for a two-dimensional photonic crystal using the MIT Photonic-Bands package. This should give you the basic idea of how it works and some of the things that are possible. Here, we tell you the truth, but not the whole truth. The User Reference section gives a more complete, but less colloquial, description of the features supported by Photonic-Bands. See also the data analysis tutorial in the next section for more examples, focused on analyzing and visualizing the results of MPB calculations.

The ctl File

The use of the Photonic-Bands package revolves around the control file, abbreviated "ctl" and typically called something like foo.ctl (although you can use any filename extension you wish). The ctl file specifies the geometry you wish to study, the number of eigenvectors to compute, what to output, and everything else specific to your calculation. Rather than a flat, inflexible file format, however, the ctl file is actually written in a scripting language. This means that it can be everything from a simple sequence of commands setting the geometry, etcetera, to a full-fledged program with user input, loops, and anything else that you might need.

Don't worry, though--simple things are simple (you don't need to be a Real Programmer), and even there you will appreciate the flexibility that a scripting language gives you. (e.g. you can input things in any order, without regard for whitespace, insert comments where you please, omit things when reasonable defaults are available...)

The ctl file is actually implemented on top of the libctl library, a set of utilities that are in turn built on top of the Scheme language. Thus, there are three sources of possible commands and syntax for a ctl file:

  • Scheme, a powerful and beautiful programming language developed at MIT, which has a particularly simple syntax: all statements are of the form (function arguments...). We run Scheme under the GNU Guile interpreter (designed to be plugged into programs as a scripting and extension language). You don't need to learn much Scheme for a basic ctl file, but it is always there if you need it; you can learn more about it from these Guile and Scheme links.

  • libctl, a library that we built on top of Guile to simplify communication between Scheme and scientific computation software. libctl sets the basic tone of the user interface and defines a number of useful functions. See the libctl home page.

  • The MIT Photonic-Bands package, which defines all the interface features that are specific to photonic band structure calculations. This manual is primarily focused on documenting these features.

It would be an excellent idea at this point for you to go read the libctl manual, particularly the Basic User Experience section, which will give you an overview of what the user interface is like, provide a crash course in the Scheme features that are most useful here, and describe some useful general features. We're not going to repeat this material (much), so learn it now!

Okay, let's continue with our tutorial. The MIT Photonic-Bands (MPB) program is normally invoked by running something like:

unix% mpb foo.ctl >& foo.out

which reads the ctl file foo.ctl and executes it, saving the output to the file foo.out. (Some sample ctl files are provided for you in the mpb-ctl/examples/ directory.) However, as you already know (since you obediently read the libctl manual, right?), if you invoke mpb with no arguments, you are dropped into an interactive mode in which you can type commands and see their results immediately. Why don't you do that right now, in your terminal window? Then, you can paste in the commands from the tutorial as you follow it and see what they do. Isn't this fun?

Our First Band Structure

As our beginning example, we'll compute the band structure of a two-dimensional square lattice of dielectric rods in air. In our control file, we'll first specify the parameters and geometry of the simulation, and then tell it to run and give us the output.

All of the parameters (each of which corresponds to a Scheme variable) have default setting, so we only need to specify the ones we need to change. (For a complete listing of the parameter variables and their current values, along with some other info, type (help) at the guile> prompt.) One of the parameters, num-bands, controls how many bands (eigenstates) are computed at each k point. If you type num-bands at the prompt, it will return the current value, 1--this is too small; let's set it to a larger value:

(set! num-bands 8)

This is how we change the value of variables in Scheme (if you type num-bands now, it will return 8). The next thing we want to set (although the order really doesn't matter), is the set of k points (Bloch wavevectors) we want to compute the bands at. This is controlled by the variable k-points, a list of 3-vectors (which is initially empty). We'll set it to the corners of the irreducible Brillouin zone of a square lattice, Gamma, X, M, and Gamma again:

(set! k-points (list (vector3 0 0 0)     ; Gamma
                     (vector3 0.5 0 0)   ; X
                     (vector3 0.5 0.5 0) ; M
                     (vector3 0 0 0)))   ; Gamma

Notice how we construct a list, and how we make 3-vectors; notice also how we can break things into multiple lines if we want, and that a semicolon (';') marks the start of a comment. Typically, we'll want to also compute the bands at a lot of intermediate k points, so that we see the continuous band structure. Instead of manually specifying all of these intermediate points, however, we can just call one of the functions provided by libctl to interpolate them for us:

(set! k-points (interpolate 4 k-points))

This takes the k-points and linearly interpolates four new points between each pair of consecutive points; if we type k-points now at the prompt, it will show us all 16 points in the new list:

(#(0 0 0) #(0.1 0.0 0.0) #(0.2 0.0 0.0) #(0.3 0.0 0.0) #(0.4 0.0 0.0) #(0.5 0 0) #(0.5 0.1 0.0) #(0.5 0.2 0.0) #(0.5 0.3 0.0) #(0.5 0.4 0.0) #(0.5 0.5 0) #(0.4 0.4 0.0) #(0.3 0.3 0.0) #(0.2 0.2 0.0) #(0.1 0.1 0.0) #(0 0 0))

As is described below, all spatial vectors in the program are specified in the basis of the lattice directions normalized to basis-size lengths (default is unit-normalized), while the k points are specified in the basis of the (unnormalized) reciprocal lattice vectors. In this case, we don't have to specify the lattice directions, because we are happy with the defaults--the lattice vectors default to the cartesian unit axes (i.e. the most common case, a square/cubic lattice). (The reciprocal lattice vectors in this case are also the unit axes.) We'll see how to change the lattice vectors in later subsections.

Now, we want to set the geometry of the system--we need to specify which objects are in the primitive cell of the lattice, centered on the origin. This is controlled by the variable geometry, which is a list of geometric objects. As you know from reading the libctl documentation, objects (more complicated, structured data types), are created by statements of the form (make type (property1 value1) (property2 value2) ...). There are various kinds (sub-classes) of geometric object: cylinders, spheres, blocks, ellipsoids, and perhaps others in the future. Right now, we want a square lattice of rods, so we put a single dielectric cylinder at the origin:

(set! geometry (list (make cylinder 
                       (center 0 0 0) (radius 0.2) (height infinity)
                       (material (make dielectric (epsilon 12))))))

Here, we've set several properties of the cylinder: the center is the origin, its radius is 0.2, and its height (the length along its axis) is infinity. Another property, the material, it itself an object--we made it a dielectric with the property that its epsilon is 12. There is another property of the cylinder that we can set, the direction of its axis, but we're happy with the default value of pointing in the z direction.

All of the geometric objects are ostensibly three-dimensional, but since we're doing a two-dimensional simulation the only thing that matters is their intersection with the xy plane (z=0). Speaking of which, let us set the dimensionality of the system. Normally, we do this when we define the size of the computational cell, controlled by the geometry-lattice variable, an object of the lattice class: we can set some of the dimensions to have a size no-size, which reduces the dimensionality of the system.

(set! geometry-lattice (make lattice (size 1 1 no-size)))

Here, we define a 1x1 two-dimensional cell (defaulting to square). This cell is discretized according to the resolution variable, which defaults to 10 (pixels/lattice-unit). That's on the small side, and this is only a 2d calculation, so let's increase the resolution:

(set! resolution 32)

This results in a 32x32 computational grid. For efficient calculation, it is best to make the grid sizes a power of two, or factorizable into powers of small primes (such as 2, 3, 5 and 7). As a rule of thumb, you should use a resolution of at least 8 in order to obtain reasonable accuracy.

Now, we're done setting the parameters--there are other parameters, but we're happy with their default values for now. At this point, we're ready to go ahead and compute the band structure. The simplest way to do this is to type (run). Since this is a two-dimensional calculation, however, we would like to split the bands up into TE- and TM-polarized modes, and we do this by invoking (run-te) and (run-tm).

These produce a lot of output, showing you exactly what the code is doing as it runs. Most of this is self-explanatory, but we should point out one output in particular. Among the output, you should see lines like:

tefreqs:, 13, 0.3, 0.3, 0, 0.424264, 0.372604, 0.540287, 0.644083, 0.81406, 0.828135, 0.890673, 1.01328, 1.1124

These lines are designed to allow you to easily extract the band-structure information and import it into a spreadsheet for graphing. They comprise the k point index, the k components and magnitude, and the frequencies of the bands, in comma-delimited format. Each line is prefixed by "tefreqs" for TE bands, "tmfreqs" for TM bands, and "freqs" for ordinary bands (produced by (run)), and using this prefix you can extract the data you want from the output by passing it through a program like grep. For example, if you had redirected the output to a file foo.out (as described earlier), you could extract the TM bands by running grep tmfreqs foo.out at the Unix prompt. Note that the output includes a header line, like:

tefreqs:, k index, kx, ky, kz, kmag/2pi, band 1, band 2, band 3, band 4, band 5, band 6, band 7, band 8

explaining each column of data. Another output of the run is the list of band gaps detected in the computed bands. For example the (run-tm) output includes the following gap output:

Gap from band 1 (0.282623311147724) to band 2 (0.419334798706834), 38.9514660888911%
Gap from band 4 (0.715673834754345) to band 5 (0.743682920649084), 3.8385522650349%

This data is also stored in the variable gap-list, which is a list of (gap-percent gap-min gap-max) lists. It is important to realize, however, that this band-gap data may include "false positives," from two possible sources:

  • If two bands cross, a false gap may result because the code computes the gap (connecting the dots in the band diagram) by assuming that bands never cross. Such false gaps are typically quite small (< 1%). To be sure of what's going on, you should either look at the symmetry of the modes involved or compute k points very close to the crossing (although even if the crossing occurs precisely at one of your k-points, there usually won't be an exact degeneracy for numerical reasons).
  • One typically computes band diagrams by considering k-points around the boundary of the irreducible Brillouin zone. It is possible (though rare) that the band edges may occur at points in the interior of the Brillouin zone. To be absolutely sure you have a band gap (and of its size), you should compute the frequencies for points inside the Brillouin zone, too.

You've computed the band structure, and extracted the eigenfrequencies for each k point. But what if you want to see what the fields look like, or check that the dielectric function is what you expect? To do this, you need to output HDF files for these functions (HDF is a binary format for multi-dimensional scientific data, and can be read by many visualization programs). (We output files in HDF5 format, where the filenames are suffixed by ".h5".)

When you invoke one of the run functions, the dielectric function in the unit cell is automatically written to the file "epsilon.h5". To output the fields or other information, you need to pass one or more arguments to the run function. For example:

(run-tm output-efield-z)
(run-te (output-at-kpoint (vector3 0.5 0 0) output-hfield-z output-dpwr))

This will output the electric (E) field z components for the TM bands at all k-points; and the magnetic (H) field z components and electric field energy densities (D power) for the TE bands at the X point only. The output filenames will be things like "e.k12.b03.z.te.h5", which stands for the z component (.z) of the TE (.te) electric field (e) for the third band (.b03) of the twelfth k point (.k12). Each HDF5 file can contain multiple datasets; in this case, it will contain the real and imaginary parts of the field (in datasets "z.r" and "z.i"), and in general it may include other data too (e.g. output-efield outputs all the components in one file). See also the Data Analysis tutorial.

There are several other output functions you can pass, described in the user reference section, like output-dfield, output-hpwr, and output-dpwr-in-objects. Actually, though, you can pass in arbitrary functions that can do much more than just output the fields--you can perform arbitrary analyses of the bands (using functions that we will describe later).

Instead of calling one of the run functions, it is also possible to call lower-level functions of the code directly, to have a finer control of the computation; such functions are described in the reference section.

A Few Words on Units

In principle, you can use any units you want with the Photonic-Bands package. You can input all of your distances and coordinates in furlongs, for example, as long as you set the size of the lattice basis accordingly (the basis-size property of geometry-lattice). We do not recommend this practice, however.

Maxwell's equations possess an important property--they are scale-invariant. If you multiply all of your sizes by 10, the solution scales are simply multiplied by 10 likewise (while the frequencies are divided by 10). So, you can solve a problem once and apply that solution to all length-scales. For this reason, we usually pick some fundamental lengthscale a of a structure, such as its lattice constant (unit of periodicity), and write all distances in terms of that. That is, we choose units so that a is unity. Then, to apply to any physical system, one simply scales all distances by a. This is what we have done in the preceding and following examples, and this is the default behavior of Photonic-Bands: the lattice constant is one, and all coordinates are scaled accordingly.

As has been mentioned already, (nearly) all 3-vectors in the program are specified in the basis of the lattice vectors normalized to lengths given by basis-size, defaulting to the unit-normalized lattice vectors. That is, each component is multiplied by the corresponding basis vector and summed to compute the corresponding cartesian vector. It is worth noting that a basis is not meaningful for scalar distances (such as the cylinder radius), however: these are just the ordinary cartesian distances in your chosen units of a.

Note also that the k-points, as mentioned above, are an exception: they are in the basis of the reciprocal lattice vectors. If a given dimension has size no-size, its reciprocal lattice vector is taken to be 2*pi/a.

We provide conversion functions to transform vectors between the various bases.

The frequency eigenvalues returned by the program are in units of c/a, where c is the speed of light and a is the unit of distance. (Thus, the corresponding vacuum wavelength is a over the frequency eigenvalue.)

Bands of a Triangular Lattice

As a second example, we'll compute the TM band structure of a triangular lattice of dielectric rods in air. To do this, we only need to change the lattice, controlled by the variable geometry-lattice. We'll set it so that the first two basis vectors (the properties basis1 and basis2) point 30 degrees above and below the x axis, instead of their default value of the x and y axes:

(set! geometry-lattice (make lattice (size 1 1 no-size)
			 (basis1 (/ (sqrt 3) 2) 0.5)
			 (basis2 (/ (sqrt 3) 2) -0.5)))

We don't specify basis3, keeping its default value of the z axis. Notice that Scheme supplies us all the ordinary arithmetic operators and functions, but they use prefix (Polish) notation, in Scheme fashion. The basis properties only specify the directions of the lattice basis vectors, and not their lengths--the lengths default to unity, which is fine here.

The irreducible Brillouin zone of a triangular lattice is different from that of a square lattice, so we'll need to modify the k-points list accordingly:

(set! k-points (list (vector3 0 0 0)          ; Gamma
                     (vector3 0 0.5 0)        ; M
                     (vector3 (/ -3) (/ 3) 0) ; K
                     (vector3 0 0 0)))        ; Gamma
(set! k-points (interpolate 4 k-points))

Note that these vectors are in the basis of the new reciprocal lattice vectors, which are different from before. (Notice also the Scheme shorthand (/ 3), which is the same as (/ 1 3) or 1/3.)

All of the other parameters (geometry, num-bands, and grid-size) can remain the same as in the previous subsection, so we can now call (run-tm) to compute the bands. As it turns out, this structure has an even larger TM gap than the square lattice:

Gap from band 1 (0.275065617068082) to band 2 (0.446289918847647), 47.4729292989213%

Maximizing the First TM Gap

Just for fun, we will now show you a more sophisticated example, utilizing the programming capabilities of Scheme: we will write a script to choose the cylinder radius that maximizes the first TM gap of the triangular lattice of rods from above. All of the Scheme syntax here won't be explained, but this should give you a flavor of what is possible.

First, we will write the function that want to maximize, a function that takes a dielectric constant and returns the size of the first TM gap. This function will change the geometry to reflect the new radius, run the calculation, and return the size of the first gap:

(define (first-tm-gap r)
  (set! geometry (list (make cylinder
			 (center 0 0 0) (radius r) (height infinity)
			 (material (make dielectric (epsilon 12))))))
  (run-tm)
  (retrieve-gap 1)) ; return the gap from TM band 1 to TM band 2

We'll leave most of the other parameters the same as in the previous example, but we'll also change num-bands to 2, since we only need to compute the first two bands:

(set! num-bands 2)

In order to distinguish small differences in radius during the optimization, it might seem that we have to increase the grid resolution, slowing down the computation. Instead, we can simply increase the mesh resolution. This is the size of the mesh over which the dielectric constant is averaged at each grid point, and increasing the mesh size means that the average index better reflects small changes in the structure.

(set! mesh-size 7) ; increase from default value of 3

Now, we're ready to maximize our function first-tm-gap. We could write a loop to do this ourselves, but libctl provides a built-in function (maximize function tolerance arg-min arg-max) to do it for us (using Brent's algorithm). So, we just tell it to find the maximum, searching in the range of radii from 0.1 to 0.5, with a tolerance of 0.1:

(define result (maximize first-tm-gap 0.1 0.1 0.5))
(print "radius at maximum: " (max-arg result) "\n")
(print "gap size at maximum: " (max-val result) "\n")

(print is a function defined by libctl to apply the built-in display function to zero or more arguments.) After five iterations, the output is:

radius at maximum: 0.176393202250021
gap size at maximum: 48.6252611051049

The tolerance of 0.1 that we specified means that the true maximum is within 0.1 * 0.176393202250021, or about 0.02, of the radius found here. It doesn't make much sense here to specify a lower tolerance, since the discretization of the grid means that the code can't accurately distinguish small differences in radius.

Before we continue, let's reset mesh-size to its default value:

(set! mesh-size 3) ; reset to default value of 3

A Complete 2D Gap with an Anisotropic Dielectric

As another example, one which does not require so much Scheme knowledge, let's construct a structure with a complete 2D gap (i.e., in both TE and TM polarizations), in a somewhat unusual way: using an anisotropic dielectric structure. An anisotropic dielectric presents a different dielectric constant depending upon the direction of the electric field, and can be used in this case to make the TE and TM polarizations "see" different structures.

We already know that the triangular lattice of rods has a gap for TM light, but not for TE light. The dual structure, a triangular lattice of holes, has a gap for TE light but not for TM light (at least for the small radii we will consider). Using an anisotropic dielectric, we can make both of these structures simultaneously, with each polarization seeing the structure that gives it a gap.

As before, our geometry will consist of a single cylinder, this time with a radius of 0.3, but now it will have an epsilon of 12 (dielectric rod) for TM light and 1 (air hole) for TE light:

(set! geometry (list (make cylinder
                       (center 0 0 0) (radius 0.3) (height infinity)
                       (material (make dielectric-anisotropic
                                   (epsilon-diag 1 1 12))))))

Here, epsilon-diag specifies the diagonal elements of the dielectric tensor. The off-diagonal elements (specified by epsilon-offdiag) default to zero and are only needed when the principal axes of the dielectric tensor are different from the cartesian xyz axes.

The background defaults to air, but we need to make it a dielectric (epsilon of 12) for the TE light, so that the cylinder forms a hole. This is controlled via the default-material variable:

(set! default-material (make dielectric-anisotropic (epsilon-diag 12 12 1)))

Finally, we'll increase the number of bands back to eight and run the computation:

(set! num-bands 8)
(run) ; just use run, instead of run-te or run-tm, to find the complete gap

The result, as expected, is a complete band gap:

Gap from band 2 (0.223977612336924) to band 3 (0.274704473679751), 20.3443687933601%

(If we had computed the TM and TE bands separately, we would have found that the lower edge of the complete gap in this case comes from the TM gap, and the upper edge comes from the TE gap.)

Finding a Point-defect State

Here, we consider the problem of finding a point-defect state in our square lattice of rods. This is a state that is localized in a small region by creating a point defect in the crystal--e.g., by removing a single rod. The resulting mode will have a frequency within, and be confined by, the gap.

To compute this, we need a supercell of bulk crystal, within which to put the defect--we will use a 5x5 cell of rods. To do this, we must first increase the size of the lattice by five, and then add all of the rods. We create the lattice by:

(set! geometry-lattice (make lattice (size 5 5 no-size)))

Here, we have used the default orthogonal basis, but have changed the size of the cell. To populate the cell, we could specify all 25 rods manually, but that would be tedious--and any time you find yourself doing something tedious in a programming language, you're making a mistake. A better approach would be to write a loop, but in fact this has already been done for you. Photonic-Bands provides a function, geometric-objects-lattice-duplicates, that duplicates a list of objects over the lattice:

(set! geometry (list (make cylinder
                       (center 0 0 0) (radius 0.2) (height infinity)
                       (material (make dielectric (epsilon 12))))))
(set! geometry (geometric-objects-lattice-duplicates geometry))

There, now the geometry list contains 25 rods--the originaly geometry list (which contained one rod, remember) duplicated over the 5x5 lattice.

To remove a rod, we'll just add another rod in the center of the cell with a dielectric constant of 1. When objects overlap, the later object in the list takes precedence, so we have to put the new rod at the end of geometry:

(set! geometry (append geometry 
		       (list (make cylinder (center 0 0 0) 
				   (radius 0.2) (height infinity)
				   (material air)))))

Here, we've used the Scheme append function to combine two lists, and have also snuck in the predefined material type air (which has an epsilon of 1).

We'll be frugal and only use only 16 points per lattice unit (resulting in an 80x80 grid) instead of the 32 from before:

(set! resolution 16)

Only a single k point is needed for a point-defect calculation (which, for an infinite supercell, would be independent of k):

(set! k-points (list (vector3 0.5 0.5 0)))

Unfortunately, for a supercell the original bands are folded many times over (in this case, 25 times), so we need to compute many more bands to reach the same frequencies:

(set! num-bands 50)

At this point, we can call (run-tm) to solve for the TM bands. It will take several minutes to compute, so be patient. Recall that the gap for this structure was for the frequency range 0.2812 to 0.4174. The bands of the solution include exactly one state in this frequency range: band 25, with a frequency of 0.378166. This is exactly what we should expect--the lowest band was folded 25 times into the supercell Brillouin zone, but one of these states was pushed up into the gap by the defect.

We haven't yet output any of the fields, but we don't have to repeat the run to do so. The fields from the last k-point computation remain in memory and can continue to be accessed and analyzed. For example, to output the electric field z component of band 25, we just do:

(output-efield-z 25)

That's right, the output functions that we passed to (run) in the first example are just functions of the band index that are called on each band. We can do other computations too, like compute the fraction of the electric field energy near the defect cylinder (within a radius 1.0 of the origin):

(get-dfield 25)  ; compute the D field for band 25
(compute-field-energy)  ; compute the energy density from D
(print
 "energy in cylinder: "
 (compute-energy-in-objects (make cylinder (center 0 0 0)
                                  (radius 1.0) (height infinity)
                                  (material air)))
 "\n")

The result is 0.624794702341156, or over 62% of the field energy in this localized region; the field decays exponentially into the bulk crystal. The full range of available functions is described in the reference section, but the typical sequence is to first load a field with a get- function and then to call other functions to perform computations and transformations on it.

Note that the compute-energy-in-objects returns the energy fraction, but does not itself print this value. This is fine when you are running interactively, in which case Guile always displays the result of the last expression, but when running as part of a script you need to explicitly print the result as we have done above with the print function. The "\n" string is newline character (like in C), to put subsequent output on a separate line.

Instead of computing all those bands, we can instead take advantage of a special feature of the MIT Photonic-Bands software that allows you to compute the bands closest to a "target" frequency, rather than the bands with the lowest frequencies. One uses this feature by setting the target-freq variable to something other than zero (e.g. the mid-gap frequency). In order to get accurate results, it's currently also recommended that you decrease the tolerance variable, which controls when convergence is judged to have occurred, from its default value of 1e-7:

(set! num-bands 1)  ; only need to compute a single band, now!
(set! target-freq (/ (+ 0.2812 0.4174) 2))
(set! tolerance 1e-8)

Now, we just call (run-tm) as before. Convergence requires more iterations this time, both because we've decreased the tolerance and because of the nature of the eigenproblem that is now being solved, but only by about 3-4 times in this case. Since we now have to compute only a single band, however, we arrive at an answer much more quickly than before. The result, of course, is again the defect band, with a frequency of 0.378166.

Tuning the Point-defect Mode

As another example utilizing the programming power of Scheme, we will write a script to "tune" the defect mode to a particular frequency. Instead of forming a defect by simply removing a rod, we can decrease the radius or the dielectric constant of the defect rod, thereby changing the corresponding mode frequency. In this case, we'll vary the dielectric constant, and try to find a mode with a frequency of, say, 0.314159 (a random number).

We could write a loop to search for this epsilon, but instead we'll use a root-finding function provided by libctl, (find-root function tolerance arg-min arg-max), that will solve the problem for us using a quadratically-convergent algorithm (Ridder's method). First, we need to define a function that takes an epsilon for the center rod and returns the mode frequency minus 0.314159; this is the function we'll be finding the root of:

(define old-geometry geometry) ; save the 5x5 grid with a missing rod
(define (rootfun eps)
  ; add the cylinder of epsilon = eps to the old geometry:
  (set! geometry (append old-geometry
			 (list (make cylinder (center 0 0 0)
				     (radius 0.2) (height infinity)
				     (material (make dielectric
						 (epsilon eps)))))))
  (run-tm)  ; solve for the mode (using the targeted solver)
  (print "epsilon = " eps " gives freq. = " (list-ref freqs 0) "\n")
  (- (list-ref freqs 0) 0.314159))  ; return 1st band freq. - 0.314159

Now, we can solve for epsilon (searching in the range 1 to 12, with a fractional tolerance of 0.01) by:

(define rooteps (find-root rootfun 0.01 1 12))
(print "root (value of epsilon) is at: " rooteps "\n")

The sequence of dielectric constants that it tries, along with the corresponding mode frequencies, is:
epsilon frequency
1 0.378165893321125
12 0.283987088221692
6.5 0.302998920718043
5.14623274327171 0.317371748739314
5.82311637163586 0.309702408341706
5.41898003340128 0.314169110036439
5.62104820251857 0.311893530112625

The final answer that it returns is an epsilon of 5.41986120170136 Interestingly enough, the algorithm doesn't actually evaluate the function at the final point; you have to do so yourself if you want to find out how close it is to the root. (Ridder's method successively reduces the interval bracketing the root by alternating bisection and interpolation steps. At the end, it does one last interpolation to give you its best guess for the root location within the current interval.) If we go ahead and evaluate the band frequency at this dielectric constant (calling (rootfun rooteps)), we find that it is 0.314159008193209, matching our desired frequency to nearly eight decimal places after seven function evaluations! (Of course, the computation isn't really this accurate anyway, due to the finite discretization.)

A slight improvement can be made to the calculation above. Ordinarily, each time you call the (run-tm) function, the fields are initialized to random values. It would speed convergence somewhat to use the fields of the previous calculation as the starting point for the next calculation. We can do this by instead calling a lower-level function, (run-parity TM false). (The first parameter is the polarization to solve for, and the second tells it not to reset the fields if possible.)

emacs and ctl

It is useful to have emacs use its scheme-mode for editing ctl files, so that hitting tab indents nicely, and so on. emacs does this automatically for files ending with ".scm"; to do it for files ending with ".ctl" as well, add the following lines to your ~/.emacs file:

(if (assoc "\\.ctl" auto-mode-alist)
    nil
  (nconc auto-mode-alist '(("\\.ctl" . scheme-mode))))

(Incidentally, emacs scripts are written in "elisp," a language closely related to Scheme.)


Go to the next, previous, or main section. mpb-1.5/doc/index.html0000644000175400001440000001730712315325724011634 00000000000000 MIT Photonic-Bands Documentation

MIT Photonic-Bands

Welcome to the manual for the MIT Photonic-Bands (MPB) package, a program for computing band structures (dispersion relations) of optical systems. Photonic-Bands was developed by Steven G. Johnson of the Joannopoulos Ab Initio Physics Group in the Condensed Matter Theory division of the MIT Physics Department.

Overview

This documentation is divided into the following sections:

Feedback

For professional consulting support of the MIT Photonic-Bands package, and photonic band-gap applications in general, contact Prof. John D. Joannopoulos of MIT (phone: (617) 253-4806, fax: (617) 253-2562).

If you have questions or problems regarding MIT Photonic-Bands, you are encouraged to join the mpb-discuss mailing list. This way, you can get help from other users of the software. In addition, this way other users can benefit from your experience by reading the mpb-discuss archives.

Alternatively, you may directly contact Steven G. Johnson at stevenj@alum.mit.edu. Complicated problems may be referred to consulting, above. mpb-1.5/doc/diamond-bands.gif0000644000175400001440000001561012315325147013020 00000000000000GIF89a¾Z÷ÿÿÿÿÿæææ,¾ZGýH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç…ÿBü'0$É„'?v ò#Ë– MŠ,(³¦Íš0¾Ì©q'Ï‹>V”)cТ>$zЦÁ” •"œYÒdÕ–R‘>̪•!×® ¡‚ÝÚò&S§ÌZ}ºv"ÚŠ_»Ô*ÝqÇÌ«— ß¾4“åx·gYŽ%¾x21`Çz!.œ¶-U¦9%Dªy*e `?#ÌzVtfÁ:QC4í–$f¸ž_G¦¸Xe猵 Þf˜»2Õ„RÕŽÄyZkÊÂteTî»írâ4o>g®Zwk­»aö®ú{ºsïFýµ>W-ëêç‹ ½ïß/Ì~‘ºSóð›£/‘>Òô5ÕÛvˆ Hvò)äßO — \Ž6”Yäñ‘Où¡Ö Lrá^²$–hâ‰(¦¨âŠ,¦8@‹0ÆØ¢L*Ú$ã8âøbŽ<öè¢@¹cDÞØ!LüSä’1Éä“?B)¥‰NN e•V>‰e–E Òfl!”$—RnI¦gj™&“f®Éc›n‰€s–Õ^…²aöۆ藟ک~®áD¨”ÙwgsÊ7à¢úÅ–(z–—aФ‘ ¦iX”r árEÑ9c'½fjj€ ôý)m뵊—¬@&ÜO«^*¨e½j˜^•úúk«’Y˜S®] ;¡¨Õ);«²:k‘´uFKk­OEH-˜ÐK«f•f[Ò³ÜÉ4À¹è¦«îºì¶ëî»ðÆ+ï¼ôÎkS½øæ«ï¾çþÃï¿,ðÀë^;®µß:Ô(ƒ¥N{í¶IU+²}"\—®*…ëÕà +lÇ{\”¦[2 àòéQÉ#sÜšÊyɲÉ!û™²±ÍÌðÉõyH˜m.{»nÜF®Ð5K¼ÒF:KÈsˆõ4Ô/ý2ÎÃ"²ÁiMýá§:ß¶p^?5me›½ëØ»U±Ö6sÝ´ƒp cþ'ýµÜi'Híª‰Í}aÐ[,8V„ÿ _‡Þw³¡]ÆÝ¨uSÝ×yìÁÌÓÙŽW¡æ&®¸Ê\5Þ«è{þ8äèw´jœC{·²šž)ê“h´ß¸«­ºÞ©h×–ïûµ¶[m¼j÷ê¡3_ôî…//˜ÆÑ[Ï:×Üwïý÷à‡¿rª!—ü„´²ÚLç[tÙq ²ßªeX zW·Æ_ÿåï«?TíSÌZ˜%¾ð€L FàW!:pt| Ë½ìål<ÒQ¤ö”AŸiv|ûàdB5(ì¬?°bNñô™ÙÑ®xé« È6B²ýÍg|JÖ ÝS»Üý˜Ðƒ¼ßÝ:r8gÑi…åòÝž‡¼ÚÐa«9Õœ’w6ÿuf;*„ŸÄRuGT¶£Ðjˆ£Ä¼¹M(.ŽîDˆ¨è 1‰É!àú´x'B*OoÞ §°Òìs‹²£ ó·Å ù?Œ*Yæ§:/YañÔyxµü,f޼^Ùô@ú-LòY¤'9Qò†”}c"ÅÅR¢ÒŒL”Õ˜â„&ZÖÒ–=‚.Y¤Ë]®¨—¾D‘)2Ë`ɘ9&2I¤Ìe6ә˔‘­TyÊ=Bç&Ë&ºî¥Ínzó›à §8f.vq3]çDgMÚUÎu q3ä;KX›Gýñ)s­ü¤ç˜7O2Ÿ¹™])"Ö§Œ=ž=Ú¹ê ÏU½ã] óJ$fr]ŸÓØ ßí“'Ô„#GsÃW¾mh¥©I+†Ðø|ì…0ŒåÐH5ÓG2°)+uiAAˆ?æh›žv~ ÔjRrb¹æF3ÊÈTùÑ ‘!TÿHD9–t¤RtH IRNU‡$ Q7çċ⠫Y!Y«FȆV{T)Z]™C—àPy}«Zi·¹Â2¡veâÆºÄ˜„ôKÖªbµåÖ ’­®xejðbè×®æì±¨zgÄÛÅùq¶³„áê¬àZÔÊꔲyÕ+® xÖÓýJ–±}-l¶ÙšžT¦1-Ÿh]‹ÛÕ6±t5mË(W¾Š+µÛ Í`€›ÖÞε²å#þê÷•¯.5ºª…®sŸË¿Qâ4¹Ø¯g…;ÜÖat±GE®k÷ÙÁêªÖJcyÚDò–ö¡:ŒïrÕ+Iô,L¿¿Ý®£àý†—¾Úý.JŒº`Ê5ØÁ ~°„#üº w¾°…5ÌáS/æ)†CŒÞâ’x‚(N±ŠWìÀBéöÄÿ+ðÅØÛRÅuM$2SYÌãûøÇKŽLä"Ù¨ä6ÇÉä&;9œéTgHžLå*[^!äo#wX°&Ò¬mmo`ë«åŽý^p…éÁçwÀ,»ù®w¼eNïËÃSM“7l†¨˜o[TQ†¬cÏXÛÌZÐ8Sêysû!Í÷ÌÈ! ¦òìeÈîUÏö]+™|é˜ 5kU(TÐ=‡ÖÑ–½šq#+X̆ZÔV}ódyèXƒ6•»•/ÇŒÔ9GÕ¬ž5œ ½ã6º¼StoO \[{ÈWM°ûL§fטùÙšær¢§ýÅæ¯Þq¶>¥½@q—š•öu±™ Ac‘šªÍ®õº1M[›FrWn<$°oÛGÞÎÞŒ.·ª0¹oB'9® í6"ëùmýÌ{gcLõƒGBšà ÊbiŽqýýiÜ Ërñ¢EºeP=zâœ:Êý™A†¿±à0m$­]™kËÀï­B ÎÊ»è;×ÿTJQ ô¶åûážÎt¶µ-©,¿–âçS ¥ApîVÝãÐŽ6¶Î²  Ïqn®°…¾g´pm/ùú¸ýœ]¶Ë§˜Ñä¥1 >¢¸ËÝîwÇû/õþKƒÁïT¼ŠžiLÂÓð‡¼0ý®$ÅÞñ‡<¿KÊW^òÌLŸI0?yÎwó–·eèEÏùœäïŠ=-Uï&Ö¯Éõ¯/ý²ùOƒ ^ð°OSîÉ´{.õÞ÷²g$ƒ÷sS àöq²Ñ‰”/ùß[ÉùS‚~Œ˜o"êþ'‰ît/‘õ¯ïè©ÛVÝ>9Öª-k«×–ü¹Ñ¹~¨6FUÊö3;rýûü6¿±¿Ó¥ŸÚ9ö·Jsö?B€8ÖOjç:JwA•ævå‡g5Wo²5t u¦X xum×oW11%h0—úw9#w~Òaö3 XsƒÆn#ˆT8¦€+¸vÃæ€•ÄI’v†µm:Hud7ƒñv€æ„Q´~œVr×!6(I ÈkÊ¥kDlxG}vÖ„aö„1÷‚˜qè[VøW(^hlQèjAØZT8b\Ø…Þ'V6`H†ÃwD’ã(h‚'˜DÈV>u†Y¸u`þx„HȆÈ&W…Fˆr6c‚Ç_8×kC†ù7…X˜‡mH‡†XXLsqz¤ˆbg‰Ewo”X‰›¨l~ÈZ¥xˆèw‰)¸‡zˆ‰¨XU>‹šèX©¸„6q÷E‹µ˜‰}(a®€ˆ†öˆ*hŒºŠTŒ¿¸ƒÃ¨sɨŒs˜nMõ…ˆŠÌØZ4hiï·Š½È³§'§U³ˆhXÁ¸A…AÿÕƒÏxléHZN¸Œåø`BV„Æ%Yç]àøañ8cÝh‹ÖøƒÿˆŒ væxkÀXˆIŽb˜Ô˜q£(ƒɉ2çŒI—‹ª(çHë?ð¸‘y:RŽêèy‘ý¹)wEþ’*ÙŒ,ɻ֑ø×’°¸“6’p˜¨¬˜’»Øhi“U†‰HŠ1ÙE¹’)qƒè‚§ø‘N¹ˆi÷”PÈ”¦˜”Q©…aÙ”U¸…0†”]x•Dƒpüè“ßH\f)b[©–sVÉÁ~W–—zÙdþBNí´—€˜ÚätZ‘^Ô•á&c¦Go…I€ù“êA:Ì…•2ù”49–CéEãW•d –)–ŸÙ™Ag‘r’I—$ø˜o9B×e|”‰šR™•Di™/oýȘ¡‰’P™›º™;ðU™´™–—É›)=zt›Òˆ™Å¹›³ùš×“;œÉIœ:þ‰_ʹœæ•v×éÀ©Iª‰“‡-Òù‰Ô‰–õ–(n žŽâˆÕ)œž™š«æš%Ÿ¥ bõ cm9™ö9Ÿô9Ÿ¿†5ù)‹þ9|û)ŸÚŸš Ê™ŽBnÖÉœ=é "ydZ¡z¡¼ÈŸ‘s–Ó¥yùœʚؘ qx üDkªº¢/†‡$::Üö€5 g2úg“ó^#Š¡>ú£@¤B:¤D d¡R¤Hš¤?Z|㩤Nú¤£io& ¥Ýó†TÚcLŠ^MJžÍùìXqG¹”]j˜Z“V¹Ut6PìÓ?a”Ûiž ú“™÷ÔsNníy‹îù cJ¦ýæIñך$—˜ÜÙuɧ†z¨Ü†Af¸SgÇž‚š¨± ¡°9©¢ØIwt—jrÄW.YžgЍ•šˆöD€sƒìØtþø¦¡žQl?'„kZFIUVá—¦]6}ú•®j¦ƒJ¨%l6êy©¶ºª :ù«Ð(d©÷W¬6­‹)‚<)ª×ŠŽî‡¬ø’7©­Õº˜Õ:¥3©­Ÿú­«)‘'©«’Ê«Z“Ôöi$ùj5nV®ë™£)” ‰®ç*p ­pНüDsK|mÚqÓ&…û¢ÀÚkš#„«-˜™™£‚…Ò ÷APÁ©§½Ê~‘r؉‹óþ(nÊBŠ™žæÚ¬»®½é‘É•Z7…žŠorº‚ت ä®Â§¬SÉ­­èD©ê«aD"§¬zâœÍš§â16Wdqô4@‚ÄBûœXØ8Õ¶²¨ê´òW§kÓ±’ÙsÛ:°Æ ióF~W­f;>`‹³Å:p»¯qж¹‚GȵúÊ9婨9„¿JŒ{ž÷™¢ª†'°ýš¡…Ú] ûžÝÚA±:ULŠ3ÈRª·Jµ¹š­¯´Ž‹›¾V²ShS«¯"†*Û—êe¶N«‹ýâºæ!˜ß¤º´»—¬Ûº¹M®ûº»ûd¿»Á»dRf]¼â¢‰Iw˜¼dÄ,ÑÙ¤ý¶â§[™ú¨ýd„‚û°© ¦5 HÔ»¼ùV´­)«§É ‹›¯ÂAqvê±Úkµì›½&9?Æ¢¸y¨¶[¸¢‹µær€k¥sZƒ й;²F¹âkµÁúŸª*¿¦{¬?+½c¨¨å»“‰«¼ ¾Œ¾\ÔÀ\ŠÁ,±k¾ ̶,¡Ù¥¹ÿù² ÂL»§ û®O‡€í#užÈ°Û®¢ ÃÎuXgqkô›²8œÃ,ìqömäû©—/<Á.¬Ã}:¹)âz¯÷[·Q)·› …I¼©Ì*Ä!LĬZÂ_FºIÄ1{ÜkÅÉŠ§p$Fþ˳C¼M\ÈÇwÒ#Öþg WzžwÇZÂx| y4²Ç„\È7®u¬w~¬&†ìx‹Ì&ÁG+‰Œw¼$•L$—|KÍɲÔx›ÈŸÊ¢ìÈ€ÜÈŽ ʇÜÇœÜ*“lw™¬É§lÊ©·Ê€ÒÊq÷Ê@‚˹„Ê© z\Ɔ¶Mº¼Ë² xÃü&´ŒˆwYÁ M¼<ËÅlÌÉ|±jxºbâÉ‚7ÈѬÈÏ Í)¢ÍË·y5"ÎB¸6Šd)ØÌYÎÚWÝ,ÍÛ¼&ìÜÎóÌ}äLÏ÷ŒÏuÎóüÆeé¶)ìT€»Æç;ª–H¶"»qîXÁÌ€:ûÏ¡‹Ðï _Yl±h|ÑM¶}³+LÂÇX¶A؈ýóËr«cÛÑUüÅtаE»Ñ\ÌÆ*‹Ò"LšÂW{_KÒmŒÓ2 Óà±Å»Ä1ÆÐcœ°L‘_J?¥»*ˆ¦õçÁN-¶¢ùËÄÓK!þ,¦ŒÐ9JA=)>ÓÎjIê¹@ÝÕTÌtô¨„Œ–GWýÓTí›áʲpâ÷ÃìšÆ ºf<Õ"Ò£G«‹Ÿ1ŒSü qVù(O_ Ä»'õ¸×þj­xÒG¥ ÅéjоèÖoÇðyÅT+ÆñÆ0«Ùœm©²4‹ÙvÁr¨Úì·‘ÝÂDÙ}I%½ŽÝµ°ÑeÍ?‰ÝÚ KN=Ö¹}¸4ÝÅg²þ½Ø½Ü|ÜÅ ÇRÚ± ÐŒÜ-KÚ*ýÁ±Å[z×ûgm¢“%èÚ^;Âò:Þ|öÛ¸­ÖÐmÞmËÑjÜêWãYETYÝìa2úÝzÍ]ì½ÛéÝÞð-Ý6ÊÁþ Ùïàç6ŽˆéÜ3 avXq:ÇåÇàà=à®ßÜM£~¯˜à…íÑûýØÎÛ›m ë<¨Û¹îm ܭĽ-Ç_ªGŸ"Ž:1þÒ(«ØNÖ ÑÑݪ¾±¡]ßްDm¸²ýÖ\«”@Îá¦í`O%×XíäÍ€Iát‹S”‹åS>Ý»2ÒŠâq,Þ ¼ãRe㋪HgíæÙrGýîäB®F¾³YNå>«â´Ý|=ß[>º»5âÚ8·Óèå_.è'ë’]ç%.—PÅæ†]åÉö¯v>èä}Y9»ç¨íÅ&û¿€~Þ M䙮鿻èÓêé/þäæUÀ6¬ŸñͯgÞêržÐý-æ2N ΘÎç ^49^’§ë¼ÞØ›Òèh®Òôwå>æL>ÃÄ.êEŽì^øçÕníMKêâ¨ê®.ÙÝ —J¾ä7×äÿ=׿¾ìà>.w*åŠ>¯£ê«^ë5éð„¼Ô­îëîâé.@Ú®ï·Þ׸bîä^ïüNï´îíÿíxîà£ÎíŽðÝ®ì¶nï¥>ãÙ.ï›Þï þ¯ðÿñRú³9ŽžÏ¾ëó.ñÇîñy~ëÅ7C>ñ)¾Ý0íÏñ1ïê.}4‡¼·Ûó·k»>ô>?ô)O–«ë>žÝÔ³ò–îÄoì¡~ÙÔ ñPßçg;î*/ë(ß¾ÿ^ñ+ï›°NññþõOõ7¿ðöƒá'.öÏö<öõjüðO÷M¯÷t¿öYšxßë'Ÿß)¯ñ¥­õUòKßjVï•yo÷2ï˜e_ð¯Ýå5¯ö‡ìmOéFKi0iÑÿ÷?õfrp.³ølOö\ïÓNãCnø‘¯ù¬ÿî6¿––_øwžù ¯Ü¿û—Îê±/ûû>öýmûoæ¹?ó˜?û½/õÅ^úŒoòç¬ú«oüµÙú·¯®Ô¿XýÖü¿ß÷‰û^æ¡þ€Oú”Z4ÏèÍ_ü¿õÈ/÷ÞøÞ=;ÿòþÙ_ÿ!@à@‚ 0˜PáB†ÿ5<qàC‰-DxQãÆ†9~éäHŽIž”(åJ…*YB4Yѥ˜/-δÉgΓ;yNüWS Ð‚D’ôyôcR¥F[Vtª” S©©VM‰µèDƒQxÕš5,Ò±EÁb”xVêÕ²OÛrdËÒ¤P¯jߌ{­^»TíÍ«W@ໄIÎíÚð¯`Ão¯T‹3èäÅ<ý—½6sÙÊ…kÜ<22MÊm†ÆŠzíç¦Ûª^ýùìNʬÛ–‰"쪮1ëÞÍ·tGŸyÎðxÓä —[^[9Cß§›;¿žðùÏêš³k>™øÂî:¿G<¿7½Ãõ·[·í•6ð÷/민ÿ²|êöîuGO·üP¬þ†ê¯@ãsJ²ä Â¥D°= 'ü»„ö3/AÛ“n½ áJΨ™8ìÐÂDQ©7zqC·Øk.F«Vì¯EäpÄ(—t$ð@s£Hèxì=®®’H)ü ÉïšÜ ¯*kRÊëBLÊà¶´rI&³T±H-ÇÜ2&‘ýŒ òÌ¡d¾2ÁT/ΞÈ|ÒÌ9óÌÎ$ì\Ï.átóÍïü¬pJ<Q¼==Ô¿(Ïór8-ºÒÌ1tf`¦y¨šlÞÕMâY±™_Ú"“Ež4g•oe0éšwšä§§>襋îjåHuî3jm½þër&š"­e3[ltÉ;í®b»é…áÞ•F©Ê8o½÷æ»o¿ÿ>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿYÁ²…K/\þ)\Èp!/]¸hÁRE ”&J!"$È>zˆìòG!DŒ QÒŠ”*X´D¨¥¡M…¹lÁbåG$ƒQ"eË™:…,™ªõËX²dÈŠ ë…K+R(1¤GŽš1]²\!æ 8pÞ¬1ó%Ë”&H†ñÁƒ‡ D<Á"ÎH¡bñ"†ì©±a¿tÑruêÇ!E’8©ÒåLœ>‰*…j•‹Ø3lßÌ©kç®:sß®5 F«T%BÿÂŒcÇ‘©\ˆcýK”GÍ—*N‚ò“)[ȸÉS(R§T¶‚-«Ö\:v¥×i²&P¨`ÿáÆ ;mJu«˜´nçÞÙÓׯß>|òÔ…«–Œ—+P’’ÇhˆÑ…VHáDF1—Hw qÄOLqÅ_Œ¡†˜]RÊ,À4“ 9íГ?ÆMÁÅt bÉ?»LåÊ%~ `küó(¯ô’ 5Õ]—Ý9âh# 2½ÈRJ&R‡a`ÅF7„J@Åoø )ÿÌ,žâ†Whaÿl¢ .Å@£ÍB±DWtAFn åF`‰Eg¼q ‰H¢‰(©ÀbË.ÀsÌSǃË*›(¢Ç¿5q„>åƒPIô´CN6ÍŒYÊ%‰ôáÕ_lqÅO,q„\ïÞU§dRÔÝEªo0' (®ð’L5á¨#>ûÔ§=ïœÓ4ÅÜ’Ê&MÚÁ†`pP0!œG=”}¶;i¯]Í2ÁØ’J'‘è[îX²ÞMö…y$ÒÉ?¿ “‹)ŽØ!W„Ç?•”BK0Í\Úh¥ö 6Ï“K+¡¨Däâp†.ÇaÄ!Â'Ná Zè¢|N 1x‹P@âpXß@„¹Ô%BHh²ð3 -l8Cb–…™mHƒ`%:A VÈ{+Fa’aŒ_Ô–(Dÿΰ)(áaë–¸Äð@ y ! 8%cÿXÊ&шCbux ¼0êQ;oLøHE&þa3¸å%\ƒжB*,¨íBÖPž`ÿ/˜¡t„xÄ&PA `0ãáH<ê}äc^“ Ép†3üMSBûBŠYãÚ Ñ<î‘|܃î0G7¦ ^À‚—` |7†-Ô’ƒÍDÖò4†Šþ Z0p¤OèMUG<ìT”2È‘…B,%ŠDÀ¡ S˜Â?Òp‡BHª¨…/ŒaILj’“Ï@Æ/h‘ NOB„R] j°ƒ Á‰TÐâÈxF5°‘Im\cÍ0†/j¡ OèiHȺ‡DTQ E$!‡2q öˆ‡~®¡Œ^¸â YC„ª0”ágË¦Ô a™$/M ÂÆp@0⤀/1n˜Ãô ©Iç¡8m<#³Ó?à )XÈÿ c@2Ú"[‚Sœõ€G:Âq fƒ¨ØÄ#1 3xÁ O8b>ï*)ËÓ¢ÿàBEF8O…¤Ƙ†7âÃP‡ÚCë ‡6 A \°â“@„äÒ,D ›s21–ALc"S™Ê°)q=¸a YØ"!e/¤Á†¸D*þQ `ÄB€@ƒ««ð7ð!–…+pŒdh˜Ãšüp3ŠAÁR`b~ƒàjé\Þ¡ƒHÄ#*Á‰R¼bÀW”E&öð……ì ±\•àöŒ˜]c³Äç4¼¡{Ä!1‰E­"ÿHÐDQˆ3àpXÃÄà…,#뺥lå•H!}’-BÁ×Xru ÿÀ®Ð†@H‚žØÄ$þA?ä¡qh~R’ABM¸ÂM”AŒ^ܪÀÊ% ‘AèakKE …(L¡ cÉOv•®á<¨ìƺë¦pJ…èB!Ë00raS€"’hד“…]ºa‰ð`ˆ¡ g@#ÐhF2ˆñ‹[¼â˜D"ü0‡4„a"ZÃB(A H¢s@ì"ätHp‚¾wBLœ2šqzh8#òÁÐ…c™Éx søÃÿ"° ‹]ã×èF8ÈQŽrˆÃ؈’”d CÔA ÑTC!Fñ ilC 5n t…@ÅqÉñ{pÏ—MÂÀ Ô° à0í7à  veR¦y@À  Ë` ¡Ññ@õ@ðjÛ@j¶p —ðs0alxPðŠÀNk0WP h¸4!Qa°u`e˜e[& ÜÐMð0)(!!Xc\ !sÀ ˆM¹` ÑÀ _V'ÂûpñàP È  «À Œ°áòÑ"T9±‰×}TPdhy0… µ Î ãÀó;üxXâ¡ÿƒ‚gÔ¦wp—°à `øõ üÀú`†hX = £p ‹0SmPd$Æc|îòd!Ô[(®µ ¡ ¿À Øpˆ‰˜“QrÿàˆPJa x_àðÑ‹ØPï…ô î°gÙÐ?¦ ”Œth ÖÅR °úecWÀhÿÀ ¬° È@ ›ÆH^ x@öœt ­ðr€USàÿ‹Ð§ Åà ÖÀ ë×~ï— Ñ k… n5w°QUc%L¥&s0—ð ÿ` ØÀ ¶°ocP5±Œ°ѱ B"[Poÿ „@q7‘þzP  ¤Ð µÀ À Ìð §÷ ÌÐCµÐVŽs`ƒÃ òZ)J0„bp°’P ¡¨t…mpÀ– ªp(òsxV0QÀwÏ‚3“p€pŽP › ¨à µ#ÓÇ Ä°l°P°Hv£HG Nð,ÇT`}7V°eá¶BðGHgtä]³•Ìãe n w°€`ÿ` ð šÐ{PPÐ6 ÞÑthdpô\ıšCYÞ1—òsf9R9Â!_²•H'‘,’U[F@rÿQ>ð6ÐPP{Кð ` Žð€°w n eÂC<é²ñœEwtIg‹@þâ*´w™—.A!xåN í*e·yP`- ! Ñ ÈÀ7µà ¨ ›P Žp€p(]0< êwVP—ñ²   ` ŒwÐc )g°p@xÀ‚€ÿ 0g ˆ@] ;PÕµ,ÈÉøR`K0ÃIPcÀ!„P_toÐjpdr—f䟇x[§J`ÅÎ’ÅÈuÿ`PÐŒ L‚Ðv Õ¶hPbðHÿ÷·Äʼnx´• µPó8 Œ`óiÄeúy9½¢̉tDPʦ̜ª¹È¥L>€ÿ@A€rУ0 ·P ¬°›ÈÈx ïR,ñ2 !Ž  ½ø ÿ ¶Ð ¦ð ˜—É)*ÅÕÄãL°KÐNð|Ç+É…HsñË%!/ A¡  Ê€Ìþ ¨ ›@ ÈHZ“oÿ°l„2ˆ¡" š0 ‹0{Ð-dÐsV@ª]c0b<êÕƒ<Ê•RÀj ñ&…#S2q× cv²¼k–XºáË Ì°  ¼¢¦ÿà •°‚€oÀZ¿…r €~€qÀj\›•!Á¤‹·"t ºè º }ËàÒÊp Ãàv±`|KT'KÐTpЊ I£GkÔ` Ö@ ÑÐ Ç ¸H‚FxÀQB °æ¦}d¨<Y‘‘5l†0 Á$ Þ6 Õ` Õ ÎpE›ctÂHà'~’¤e Y Úà àßÀ ×P‘ʬ ðaðZ¢¢Ð Îð<Ð8§lÄ'™GgçH øKÐ×1Ë0 ÙÐ ßÚÝ Ó°}!ýÔ~ –0 ¯° Å€~Þ@çê€å°??ÿ#´œ×2XpÀ ·° Ôà ½ #}€`x»P†¼­† Ÿ° ·ð€ÕÀ â`ÚæVÃhÃhp°€×¤ßÃP?¡ÁïñðëP°Ú­à y­ÂÃiÀ ©ð]ò)V ¹”­ÛZ@eˆ*P§0 ¿  @Bêáñíà ò²HÇ‘{`ÉI aÓeåà´öp÷g;¶ ¾7 Á‡æ[cÐDüÒ,Zð›,ó²SÌ[MÉÊÛ¤ ã  …äöðδSþôx ‹e 0>‚ ó±[fÎ ² Ñf½…aQ‡Ît‚WUÿp…µòЭm»p ]v`–x!)»Pà[³ÒuÀèX& ½x â°‰Èýp°îPÛð ÂЖÐk ñ1xÅ#¯¤˜IÞ.${pØÐ÷èÔð è`ç±cÒ—ù/‰Ó"[3‘À#½° ¢Nêø`ê‡Ó³ª¾°qꃠÓh ŸV€\¶N‡žMÐ[Ñ"„~“ªÐ…Ó ìð³Ý!äý¢ϲÐ ­° É` ­C°ú°¡x®¢ö Ãp %& †°r`{nñ·oìLÆu“úþ5¡˜€ íñœæÕÑhðpì4¦] ‰FÁ&ÿðîÇ€’ÿ>GnÒŠàÐg«·„ƦtO:nà”¯tpVÎjÁ„üò“‰pËX2„¼ÄWÿ` ©@ –0oÐjZP÷÷ñí ÛPæîò€ãèP$@» ¯pŠ‹ðtÀjKö‘F×}˧w`d© §04uð×Y`Ï1& !r àÀH]ÀUˆà Ù¿P ‰ð\-qv˜p µð€ÖÐ ãÝÛ]( Éà ³Ð÷ŽWéjƒŠtv]/‚` ­ðÑ Äà “paPÓ©“ Bž ÉÍC…Ȧ °€¹¶¿ 0]ÅÿÀ|• ¦6ÆÛýÙ¡} Ðÿ`‘l•‘%?È.WÒ•Y@q“€ ÿ Ó ´€ {0æ‚ìd” m¸Ñ`ylx Q õï)JÖp©òÏ :€]Ū–¯bË M«f­š´fÇ~ÕJÅéQ :i¼Ti‚dH A†iB¥ Ä@:ü§ÉP0Vþm!‡¢IžRÉ B$É+^̸±Ã >ÿÖ Í’Å 6uü Š´i«Yº~C¶Œ3eÆ€ÙRʼnQ8c²@IBˆ>€Ì¬¹e :zþòƒÇ`—®\Ĥ‘³§#L¡ÏdÅŠ/bÆŒ óeË•*Tª`‘œ@ˆ aúÿdŠ•,\½„K–ÌX¯WœÑ)ƒåIß¿<”÷ø!Ĉ’'T²t 3Z .XRS¹²Ìª~ 9òñCf‘#J˜8yÊ'M˜,aÒäÉ”+]&¿±Óg"H.é„”Uféå˜g Šåžˆ€éë!°€‚#’XÂ>÷Þ“o úœÂ ïÎhƒŽ=†bÅ!Z$âE[t=%šðL‹/ÈPã :òøƒ3!å\nq…BÒxBþÙÁÂU\QaŒ²Å"2d é¼ù’8¢"T|Â#¬P Ä*²àŒ1ÌHƒ 7àø ä4²X¢ÌžˆB ÿ)<\" $Œ(Sˆ3ÓT3¦!hl‚Ëî® Š&”ó% ÐLó‡5©Ä 9D4Šãþ!b‰,иBù9þqƒ4Ì»,ªÂ‰%UT5K‚ô4l1¼ÈbS&’0¢—µòŧ¤R["„bƒtx" B8qå\^ù'H±5:ÞPƒŒ/´°"ŠNÇ,SÆmÿ•Rˆ@ö £3ÀØÂŠaç£C÷žhbQGÅ…pÂÀÊ‹‰§=.‰¥˜ÿée–UHéä’xéÃŽ7Ò£‹+¦x¾úØ‹Ø &<Å6ˆ*qÄ?ìp#áÓ¨P50D# 2*žPÂ!~èA9ÿsê ,Ê ãƒzáÍ7azÁEVLùH8\Î.µ*ºû¢º1ÄðBß(˜8b R G ÙC·»ê¢Œ7ðð#?ô ƒ1¶ ¢‰½ÿ § Èb 8ú`„UlÆeÞZb~ÑeVFÙ$Dü¨ƒ 2¤Íb 1Ö¨Ã*¬„6à +Ž#bYRñdDø€ƒŒ-ú'CxB¥““è@£‹É÷†I&$š¨Â‹4êȉ“Tjùå˜f¤é¨ši Y¦_jaE”KÄzà ÚŠžB¡Ä<°! W83†‘ Wˆâv0Ã?¢@…1ì´HFû 2‰@Ä YˆÂÿÓTT)%@ aXÃñòÑâÉ€Æ5¸ñ p€ÃÚ¨†3~# Sdb{`þ!….Ìá« F4¤aŸØázT`Â6¦‘Œ^ÄBüǪP…0Üa®(b4ŠñKBeÐB–`a Qáì Glâ³ðE2¤¡ p”êHÇ9ÆÑ k0Cµ8&Q‡hŠ oHD)~á i$à ˆ¸C°×t€ã͆,F1‰¼ YÐê9ªbÿ0ÄÔð+8! E`Ñs p0¤˜È(^± cDCâ@G;à!x¸CãØ†o CþƒŒXÃÿa R¤ÂšøÇÜ —ʃäØ4†A‹RTârƒv¨I™;üã`eèBdIK X¨IpB÷†<œ@E-‚ÁŒk€=îay¸ãÞ Æ1r¡ŠMìé ͳBÌ;8æ hÌh„|Ôãçè†4ŠñLLÄ Z˜Bðó.Üm_zã„ÌC„îM! a Ì ! O¨âÃx†6ÈÁŽyÜCûÐÇ=⡎pX#»hÅN â*DÁ38õBv¦pÏ ôc÷€:¾1 c\tŒðÃ?Îð.h! ¨á×,£&¡ŸvÏ3\7ˆ8¦ÂÀÆ6ÊáŽÿzäƒýà>æ±q\cÀE$Hœn! Ú‘‚Ó*çƒ~¨ÕmýFE¹ ŠIbpjC°pÖ§ýuBÝÒ¬€-p!GnÐÃ!,Q Z㎅¬>&[ÙËf–¿).¡ˆ?Ô¡ eÈW °„Óö ûØG>è!ÑnLã»H %°;»10ä8´D“…žéxÁ¶‘Âx" QÈÎpj;æòêcµé‡5–ñ‹YlÓ‚ÀÃ~w…ï¢1T>‡CïQx,SÐ F.Z J ¢r@Ã0|FPÉ„&SÐBîä`y¶a Z¨BTØPWP¼Â˸F8ÔzÜÿã¡òhG9Ò‹Œ(’Œ„Ø šêÍAù,&<âw¨ƒÝ †2 |ŠMŸp…0´¡(Å?œAeÜ‚8Ãm·†4¢¬ÈE1 oè‘ç ‡7®ñŒbìâ£p¯X ¼{ºˆÓÈF7`øndcË.NL‰MÇÚÍ<3?­6ìùG {!ŠB¨ ÿ\z^N::`$#.„¡ ièŒbð¥ÀÄ"þ0‡ëÙ á¢Ò.†‘ H®oÏHF»[ŠØæA€Ÿ%Lì»)”²sŠˆ©A@Ñ<Ç a`ñˆM”â¸ú¢A kXƒÑX1x Š+/eØ‚Î(®˜¤"·èÅ0ŽQ:fœNºpE("!:œ S¸ºÔÊãœ5f!—qPÜUô`|‘ò fHœ Q O˜ÂµàE0Š‘ ·0#Äè…,Jq‰Cäa °tBx}P‰©¶Ø0ŠŒd #µ…#ô .HA EàÙÔxÀœ ì³ ý“ÒÂÐ}Í ^!ÿÃæ°‡A,bš*\A µx=ô%NE%!J–!j®çA áJl¢ø°È1˜a]ðûGxP„0!Jµ©FNè|&".eá eXƒødFH"µi…è”a_øGà‰žJŒiûëA¸>K…¨…[˜…Qh9À‚  ƒðS˜)©’mÉ–Syü ,3Xƒ8°ƒ=ü›ò!’¨„=ø$Àƒà™à–!Ø‚/ƒ2@ƒ5pƒ7ø‡þB=pƒ/€#‚°‘Uœi2”|B5 ‚ Ñ’ûø ê ƒ3Pƒ6xƒ8è¦@(BX±1¨‚$ ƒ€‚U';mpb-1.5/doc/tri-rods-ez3.gif0000644000175400001440000002155012315325376012566 00000000000000GIF89aS`÷þþþþþ þ þþþþþþþþþþ þ""þ$$þ&&þ((þ**þ,,þ..þ00þ22þ44þ66þ88þ::þ<<þ>>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿ¥aã&Μ:vþ)\Èp¡:rà¸Yƒ¦Œ˜/[°T‘ò¤‰’$GŒ)bäH%MžH©‚eË1eЬqG;xêTXgN7lÒQò„J–.bΰ‰cg B‰A¢d “&N:yòÔ‰Ó¦L–&AbtPž8hºHAâãFŒ+V°pƒ@ˆ$i"å —0fÖ¼¡“ÇÏ CŒMªduÖ­] Aℊ0gÜØñS¨Q%N¤TźÅ+˜±dÍ I£fíZ6mܺwî_¹lÄV9‚3Eljþ@Ñ"F=„a"‹—2læì¤H’¦P¨^ÕÒŒ2fÏ¢Qÿ«FòÊ(W¼˜³‘¥R³€-£¶-\9tëÚ¹{¯?¼wî´ÃN:æˆÓÍ5Îs‹*›4òÇi€‘ÅN,„H%%ÁUl1w" (®ðrL4Ù|CÎ9ê°³?è`ƒ .¨Pÿl0 J˜AH(¼HŽ:ÿŽ7Ül“ 6ÖT3M4Î,sÌ0¾ä2K+¦|r $ˆ‚GjŒÁ…P(Q<Ü0à +œ ÿ|Ђ\è -ËtsN:ÿ„óM7ÛhƒAôC 2¼Ð +´ðB ;ñ„d¸qgŠ8" cWe™W™\B‰$Ž(bH }à1‡iñ…UDÿÁÄCø ƒš0¸Àè\3äÄV„±| ‚H#‘PrI&fŒYX1‚d†G ¡NDAÅZxg¨ÑÆ6ÕqÇ?zìчðúÑÇzäñO½Ñ†g†Z\AEN0¡!‘”áN@1…YpÆ_‰I#ˆ Âk„aÅAä0ƒ®r¹Ã 7èàÃËEQ…_‘†sàÑG †d*‰²™8¦W]i‚I%¤*Rˆw¸A†O±C ŠÊå¨ ÇõÄ5Øh³M7ß„cÎ?çt³ -˜èÁ…-|Á?"œ°Â (ãU„PXÁÅjÄ ˆ@ÿrÉ'¦´2K.¾ sÌ2ÎD3M5Ö`“Í6Üx9èô) /¡b†4Œ°Ap%¨à‚ 6èÐß;²£Î9ä|“M4Çðâ (’rclQLXK O‘iÌñG#›¨r 1Î\Ó8æ¤ÃŽ~üù`;ë SN8ÛP³ 0³”b "{Àa†WDáQH×TCM4Ï0ƒ 1ÀèRË+¨„¢‰$Š ²Çl(ƒ° …Y ÁP5x Fàtà:˜± bd£|8ºÁ mdãÖ †4 ÑŒd#¼¸E,TA NT¢G³ƒÎ-PÁ H‚Ï>µ ¡Ub Ë ÿü:¼a f® …&$h b@²FÅà>@‚º€†8äˆÄ$,ѳÇB³% шD{°CØp1t! Tx‚¦./Àd oPøðAâˆHÄ?ˆC¢„ æ…:Ä¡ hp¬xw"Á=¥€ „"Ï R€XÆu†™(äzðC HE2òŽŒ$ ~ —¢\Æ m˜Ã ÁI\¢¢0…*\ ZعЅ4¥™‹[Ôb¯H…Bü€†(ìÁQH>@‚¸`8HÎøâ2äí} „" Q‰M€¢©h,fQÿ‹[àBšC0Bœ ¼/˜ÁR€PÄ$:q Xä"ÈpÆ4°ÁÙ”cO-¢^<æQ|ü£é¸0Náˆ:ˆa ÿ(B~àü€”¦dzº@6С‡€„&HÑ [ø¢ÌÆ5¶ñ qÃèÂJ[úƒ  OøÇ á \@c ±=â±cé@‡9Èoh£ÐPÆ0v1 U„â„â†0èî Kèd€ÀÒ— ÁLøú` X ÃíPÈ=ê!ÿ¸ã«1ª V`‚lÀ ±€h„0Üa›øG+šéÏhN3¸°-dñŠUœbžÈ%Aÿì¡o@ƒÆ…%;°GÐ (dp²‡BXâ«Øç3M;…'ôÎCàk({0Ê€e X@J+ß0;èD! ÈD*†Ä$í¥}5ë \ÀÂÀÖçI–Šò¥ÜK_þR5¸AuÈüÀ‡<ÔAnPC”ÈD'AþånS‰`ž&x \øÂÌ`.8Ü+}Ä ‘H[6ò‘ƒÄø ;Ìáˆu쪫씡|i@5ô„Ó¦v°XÅ(þQ8dA.h B.ÐáÇ;‚–P7.ˆ o¨ÃGP"žÅ)Vñ Y8ÿšÓÔjoA‹X`鋸C’@`öØ@L°Ô@êX‡‹ø#zÜC!íð2`a‰> á ÿ0‚øêR 8õKxB‡Â†8èa¸D(T1‹] CШ†6¼Ž£¢#ŠÖ<âA{(Dã€.Ð dèBú˜€„ sÚ¥A˜Oq `\ƒO ©Ç<âq=Õ¥ãåÐ 7°1 g #¹€Å):1 E"iføÂ„œ#LÖDr+RQ Pl¢P!úp0‘a€M<Âq0²@mÿøG4€‚D ~ˆ(þñ ~Þ´FVm,\¡ Sˆ¢—# a–9´Á 5ÌãýA‚½íµå!?èa!éWîh)T¨Ü›2w?½¡—Å mˆð஦b½Q_ä! !ˆçDªA±Àüò3¤a&&þ‡ò°¦BˆÄ?äEc<ØX"ü"ó²°‘j‰d˜'I’À0o]a ⊉¹ÞÁ³½Äá¡ø?0xy¸6D‡¡ iH{vòHDBÀ$шE$"¾ˆcÖn+< Ì j@ý䀒 A?/b4°k_ÿ"ÒûHü^æ„#‚°å(Xa €aƒàIæFHšðD(Ha T¨b¸ ª ¨P £ð ×¶ƒX°##`¢C:Y67E‘1£p f8³ô” £P ¨ ÿ€+C–m@c–~Ó £ ®0 ¸° ¿ Ä` È Ê° BÈ DØ ÿ0 µ ‡°Pp"0  UfN2p<À~ÌÑNk _tŽPO¡p ­ ¶  ¾ ÃP Ç€ N5PSpgðwðˆ ™ ¢‘ ¿P Ëð Óp ÚÀ5á`Tæ°'ìõðúà ­ÿ t Ep0ð105`}ØÇ2Ì‘ÐA,…à–ð §ð ¶Ð Ã Î Ö ‘›'SvSSuðŠ` ¡À · É ×À µ¶'ùñ"þñïÐêP á ahàΗWE@ÔhÀãK¤&|p’Ð ©@ ¾p ÎP D5Ñ£hî0šgµe0 ¡ ã =ûQŒŽ% ÍVâà Ù0 Ì@ º ¥ Ž0xð G@N G ŽD`2…aÀ{Ð ç°÷XŒïP(:€502/ð@ k`¤ ØÀ÷Àÿ È(Vùæ'€ÿ‚ Õ Ìp Á° ´À -4 ‹ z j°[»ã[Bà;€6@2'¹K }  · æ@ûðôà`…oãà9@/`#€ ðG ~€ ®ð ÊðÍ@„B¸ Ê Èp Å ÀÐ ¹P IV Ÿ Bw4wi°[db&1"\,p–5ÿð€?u𧠠ƀ—DÈ B¨ …Brlr#ð;‘P“€f¢P §€‚(€©p ¥ ˆ @¤qPDn€c cM”Cf)Y,€% ¯ Ñ ±9u œ üçäE=’ÓW6ÿ€YXT°bƒQ†„‹ÐŽà{çg~à  ±w°*j`b0±baŸô”ᙉ*CJX`Pm ƒ´¤вÖÓˆyC‘Úâaµçbàw߇`w@xïòÿ°z ¦w°{x—gà,] Òq!D€¡ë¸-cár{2AzGTÿB£Ób0™£™g(Ñ£ZÐs€Tzêr^†—xŠ'/°×¢þ‰ú¥>cJš¡E`L UŒ S|€rpt_€Q D`+7@}âIž>n{á2áò¡6뢇 ñi~Áÿ'|ö¹ˆ@wDdD¹TÀ¿E Ô7ž:Ðyˆ ¦@  À [r{Ð]°•õš"P(À†–+ÈN]0hà„ñò¤˜° ŸP›·™‚8€¼) ±Up€ cÀÐù!0n7é¤ A¸ ¥™—ÿ  §ðu?€ð #!p,¥ósÓeé —RÅ” ŸP ÑU ¹Ð À jøƒ×Š­ÌÐ Fø ®€ ~ GðQˆ:/@9 ãpQ¸æô ô`Ñp šÐb°;–(40ž;àÅeUàej z ‹0  Á ´ÿ° Áp Ì Õ€ [Ó5‹TêÐòðh÷ÀØ ¤`k @@ÿ2€‰8Щ¨ƒ²µ¡lvJndJgª¨´ fðx0Ž ¥ º@ Ì0 Ùà âpÕ‘ÖóXé€U q e°b¡Ô˜:`eãmÕà Çà ´ ‡ÀrPW6„W8*¶ öVàh`†  Ñ å0´Wk=×3–dÅ × É ·À ¡` Šðunc"+ 'G Ù` Òà É0 ½` ¯p Ÿ` ŽP@èS@´ò<{:Tù7PZ@Ð Éñÿ  rc%8© ×0 ϰ Åð ¹°B¢ ‘€po@CZ0¸D  Y à ¾  ¶ ­p ¡pqŽPy Ìr˜iB#)@\˜Õ 7kp P ð ÿPš{Ù—È` Ä ¿° ¸0 ® £t¶Em ¿7”C¹9€8  Ð ™€q‹p*·jà*x¤Gg\4¢&ð€¸GðJ„àÀZ‚'H¬¡:ª¡à š` ’€1‚ÀqrÀI´V¾ÅŽðŒŠ~ÂG|‹°qJpÀƉW@!=6ÒK½|jÈ!Pe4µL±ÿ°b‰ðžå|è7|ŽÀ á`—”–_Tj7¢{°`ÿ€¥@I6&UûB¤^°C0KÐpŠy›Ç0+1`@.å…çõ.¢Œx¬§¢°÷ÿ k_ÊJ£g¦g¥ðÌ®×ì{=m°Z·wS- 3 Ó=jË#64aÿÀË|P¢ÏÌxÿ{6öŸçG1x÷Âv²4oWÿ@ƒÀz®×`²wIýùŸ4êuIB°Wž&Idó¤Ê|.ÿ@°”bNWýýœ¢+ú|äcP.¡|¡‡ sÜŒ ÒŒ°Š_‘”|ªòÿ¦pSÐ9$½:9 ;à©,C¶©ô£¸×÷‹lüÐÔŒÐÒŠ‡€æ£Ý—væe¢‰ê‘0 Tq ` Ö–ðC‘à‹pCô%I™Q€@ ˆ0p‰5@ž’jP`Hà‡b‚ R±3•` a} c=|áa qp|ðŠq šÐ Ÿ ¢0 ¤Ù£ ¡ð œÄ'yàb@G°2Ð&&`( ÅQ5+Ë!—Q`a¦¼ššBFœà  pÙ™Ù@€f xà½zfžL©° ® ± ³0 ² ±ð ­Ðsú ýJÿp qà"@h0 ±+HPYàîvÀõ7 ˜À û‡ «Ð ¯ÝÒ½2Õ‚ÀDzeF špOªPs¶ ¼à À  Ãðà À0Àÿ Ž`]0-°ä hUFUx…ËÑìÈxðò* ˜à ¤O±P 9Ø ¿ÐàéÝ‚™Q|@‹`  †8XÄp ÊÀ Î Ñ Ó0³ ÿP È0 ™À_@-À q±èt…€eâÐ1.ƒ—à ö ¶ ƒÃpFþ ¼Ôßp(‡pð7§à µ€³Æ  «Ø³°Á5à`T ÿç@ »ÿà €@J`&÷®}2)£²%ãŒ@ 5;8¿@ ¨!®± ¦Þ˜!‡€’° ´…‰ÖïP´ aç ¹Ð ‚TPÿ°Ó=­<ð§O%SžhS}`€ «& ºQÍ T³fQ ÍNÏÑvP•ð ¬Ö @% 59B;=ò ó°×0 ­` ¢üUÀpE0 -CS]6k08 œ` n+ °f åh·ëð;¡f¤6~p‹£ð »P Î` Àh·Ósº§ Í6ÝP wù›°|ðdÀU€¹"ñ;Bm¶p †ÿ Ÿ° · Ë0 Úð ´kÔãÍæ¡ÞÂr…P ¦p Å õa-BŒ§“ºb Ø Èð ³p šà‚`¸›Æ½ÓÍhŠž; ¡ Áà Øð 4ŒÕ-úžìR°h ¥À ±Qó \•_uoüèÔÀ¸¿p ­0 ˜pyhtxõø.÷I7XЬÿÐ ÿ0ò3Ù÷ñÀUâÖ;@ìÆþOy@ °  àû•`ÙUöf¾Ïö'Ù°“Ë` ¿€ ç •Àr…”b ;½åc¤oú;ðÿ q°§ ÚÀõQôøèðO9E.Ð&ÿÿ`10Z`• Ìïˆì =ãà'H"(Ö0 ÐГÄ{ ° ¢°?‰g&*_&*=rØñ‚ ÿXðÒf*bÚÖÍû÷/¹qáÀyó‘£ 'Bhø'ÉUä:µjŒ!6Pø×`‚×%eüTBEëŸ/Á„ Sµÿãêˆ0TcÈ•5}þ]úT*+W°bÉš5KV,X®X©:5êÓ&K‘¤‡Ž4N¯Dar$3\À ÁawE=¢¹óR§Q§V%_>䇂\XL8!…þâŸ.Ô°D™“M<E”QHÑ”QBÅ“M0¡D;Dñ9ÀË,¨xB* x¸aR8¡@Z ¡¢,Ì£B‘ÄM:%$ˆB fˆd ŠpŠ/ÐxÃ>1D‘F ‘„’J.1ÓLK*™$’GA„@ø¸#Å4ʃ‹+¦pB #„ðA‡háÉf¸‡ÿ!–˜‚‹2Ú C@A„‘G"yb‰$ƒðrÈA‡|ˆ%¢¸¢‹1ÐhC;ôð#A A$‘Ea¤\m­¨A*úgŽ7Ö@ƒŒ;± "Š&’(BˆzØÁÓvè"”x¢Š-Â0ƒ 8êȃ@¹‚ (šPâˆ"†v…ˆ$˜€‚Š,º£Œ4¸Ã<öèã@„Bþ)¤Aùƒ<ì˜ãŸ7ØHÃŒ1¾à‹*¤pS#†b] ‚¢$–xbŠ+¶ø‚Œ3ÖxCŽ:ÂðB‹q£p‚‰$Ž0¢ž8¢ä& ˜ÂŠzÁà 5Øx™~õØã?üøcjÿ?úØ#;êøG8Ú¶ 1¾Øc)ž`B $væ¹#P‚‰'¤¨ .¾ß5ê ûâŒÍF[ížÝ†[n,T¾5Ú€C:þ¹#¥¦Ú>þÑ;è#b5(£‹,¬˜¢\Lu^Ûçxˆ‚Š+´ð:6_ã 2ÄÎóR$Ò9wÛ^ Âë>:ß7*²ãÛ?>¸`Bä«1Ÿ‰ËtrqîXvCù%‚¦á8ó¨ƒz3ÂØ¢Š•tZi¢ˆ$šXn0È@¼øŠü¤D(¢"¸j„­‘Dbðƒì ‡6 a ]ÏúäƒtêS<ðAÿˆP²5µéMÝ¡CÊÀ…),a2r b ¥è@TFP‚PÆ0àË s¸¸*B©HL¢–8“™*A I@¢Š0D 0ó4|Á N(‚p ((Ê9˜:ŠNhÂ’`D!ú 3d ? ÁU t ÀÀP<B¬E//¤j‡xðà & JPÈB¡ÈІF!Š…hŽ@ ì †.@a8xp´ÈÀ:øs ãŠUT§”8DE¢Ð_YA Tà‚à€A8LÅ1 Á „! KlâùQr”ÃOF‡©(Å'.ÁˆŠ\á1ð6ÿðä(6Øl“˜]ü•ðC–@ƒL Ù@NÀ‚mî ŽJ€‚p™†-ñaŠ€„%8!ŠS°´¸….x›Á替è.þÁ C¸ <0ÁP‘ |À•/ A¢!iP£Ö¸†6þ fèB†@CÐYü£Ùl&åiÇzÞxøƒ!Q NŒ"¯ E.|!Œb cÍx4>Òj\#g‰F0Tñ9Ta'À]þáÎ8Ö Ýð8Â1s¤Ãÿ˜Ç:´A T,¢ Rà ‚¼@“\ N«À…1¨!yD"$¡ Q¤·èÅ0ŽÁ ÿhLÃØÐ7¼ñ³–ìÇ?ÞfÈ¢vÐÂb`‚„`2SÚ9БŽu°ãñ¨‡>þvhC§XD´„dÐS šÖ»–l‰A rÐà Q Oœ¸ø…1–jd£ß9ÌqŽt¨ƒî€=ðñ}ÄÊ€%ò†'á$îÚáw¼ñˆ‡<æÑÙpC´èÄ!†…¨B`ð÷LF-€ pÈà ‰Q´â¿8†3¨‘ oˆ£àí}õ»_ÿR¤"ÐàE)‘‡lA LH’Ç ÃãîhÇ:ÒQŽo`ÃÿˆÅ? ˆ9 ÿÁ ãÁºØv„xEÁžd`ƒáMœb¿@F4°Ñ q¤u&>±ŽwÌu˜#ÛˆF1*R‰BÜa aÈ‚žÎµ3óØÇçÇ7´1eã«ø„$ ¡8˜á XÐØßg²¿’á |XÄ&XÁ eT£ã@‡:Lœc3·Íè(G8¸a gc¯…%á‡9¤! ZpÇz¬R÷yÖ€†2„¡ X˜‚‘8Dæ°†1p†Æéú˜»èç„*|¡ iÅ0|å_yÈ#8Þ±¨qmr€ƒØ3ŠÑ‹Y¨â•P„#MèF'Ëæ(Ç86¢kH£È†.d¡ŠP`âÿ†èØP†%“'S›Ò}QI…4¢¹Æ9ìÁÜCï¸5:ÎQïp|cØ Æ3”1Œ^Ô¢¤Ø„$ˆ;¼á `¨³”ÕmÈ„ÑhF2ˆñ‹\Ì‚¤à%A>áŒ.ŸE£¨ÀÿH ”@@xbÔ8G<èñuœƒâÇ7ºÁ m`£Òp†2ŒŒ]Ô§pæ#ñ‡˜ÏœÖ6'B4žá f$ÃÃøÅ.l‹U”—€D"¡‡9Þ36ÂyÒó–¸ìfh¾À‡LÌÕ€ 6ÔR“›@ðÊ81‚Á \Ì¢§…&$±¤×Á z§ÿ‚0a †¡»ÀE-bÑŠT˜ c!”‡5aòå9Ï dp›X "Ø@ †Ð;8BEF(aüÄð"¶˜Å+TQŠÚS‚‘/¡À°÷$ ¡9²xÎ+Z± T …PàL˜„F@AÀ 8P髹ßk X ‰Š8P/ƒŠÐ„P0Uh…WXdzŽèX…T0Qð„L „GPB89`û[Ÿ)‚BÒCúNÈ„1r„D „?Ѓ:x5°-¨(° !ˆ°  Y¨*7ÈAà§JÈNø„PÀC…Pø„0º„Ix„Eh"ÿ9‰68ƒ0À)h$"":“4A"%b"Aèƒ< 8X3ìYÂ#ðÀh¡ª$ˆ‚,P®8à£A8„Ep„ ¢"ºK „5q„E8„AB;ˆƒª-°d)„CHE¨•[É•ŠP _Ä6¨™YÅF;Ä%® ú!@‚&˜‚,ø‚2Pƒ7˜ƒ~IB•X´•* Š(%@ð•8p58ƒŠÙ‚<Á=à?„@B0˜B A„>Ѓ;hœhƒm$ƒëYÅ)0›$P°aÞ!ð+p1@š6ˆ:xqüƒr˜‚IÇòƒ=€Špƒ¯M/Ø‚5pƒ8Ø—ÇуèÉùƒªáƒË±ƒ­7Ïá‚Ð&X‚œÔùÕi/–I8˜ƒ:èÈÊ I‘$IÌ©ˆ8xy¤€;mpb-1.5/doc/analysis-tutorial.html0000644000175400001440000005156412315325636014216 00000000000000 Data Analysis Tutorial Go to the next, previous, or main section.


Data Analysis Tutorial

In the previous section, we focused on how to perform a calculation in MPB. Now, we'll give a brief tutorial on what you might do with the results of the calculations, and in particular how you might visualize the results. We'll focus on two systems, one two-dimensional and one three-dimensional.

Triangular Lattice of Rods

First, we'll return to the two-dimensional triangular lattice of rods in air from the tutorial. The control file for this calculation, which can also be found in mpb-ctl/examples/tri-rods.ctl, will consist of:

The tri-rods.ctl control file

(set! num-bands 8)

(set! geometry-lattice (make lattice (size 1 1 no-size)
                         (basis1 (/ (sqrt 3) 2) 0.5)
                         (basis2 (/ (sqrt 3) 2) -0.5)))
(set! geometry (list (make cylinder
                       (center 0 0 0) (radius 0.2) (height infinity)
                       (material (make dielectric (epsilon 12))))))

(set! k-points (list (vector3 0 0 0)          ; Gamma
                     (vector3 0 0.5 0)        ; M
                     (vector3 (/ -3) (/ 3) 0) ; K
                     (vector3 0 0 0)))        ; Gamma
(set! k-points (interpolate 4 k-points))

(set! resolution 32)

(run-tm (output-at-kpoint (vector3 (/ -3) (/ 3) 0)
                          fix-efield-phase output-efield-z))
(run-te)

Notice that we're computing both TM and TE bands (where we expect a gap in the TM bands), and are outputting the z component of the electric field for the TM bands at the K point. (The fix-efield-phase will be explained below.)

Now, run the calculation, directing the output to a file, by entering the following command at the Unix prompt:

unix% mpb tri-rods.ctl >& tri-rods.out

It should finish after a minute or two.

The tri-rods dielectric function

In most cases, the first thing we'll want to do is to look at the dielectric function, to make sure that we specified the correct geometry. We can do this by looking at the epsilon.h5 output file.

The first thing that might come to mind would be to examine epsilon.h5 directly, say by converting it to a PNG image with h5topng (from my free h5utils package), magnifying it by 3:

unix% h5topng -S 3 epsilon.h5

epsilon unit cellThe resulting image (epsilon.png) is shown at right, and it initially seems wrong! Why is the rod oval-shaped and not circular? Actually, the dielectric function is correct, but the image is distorted because the primitive cell of our lattice is a rhombus (with 60-degree acute angles). Since the output grid of MPB is defined over the non-orthogonal unit cell, while the image produced by h5topng (and most other plotting programs) is square, the image is skewed.

We can fix the image in a variety of ways, but the best way is probably to use the mpb-data utility included (and installed) with MPB. mpb-data allows us to rearrange the data into a rectangular cell (-r) with the same area/volume, expand the data to include multiple periods (-m periods), and change the resolution per unit distance in each direction to a fixed value (-n resolution). man mpb-data or run mpb-data -h for more options. In this case, we'll rectify the cell, expand it to three periods in each direction, and fix the resolution to 32 pixels per a:

unix% mpb-data -r -m 3 -n 32 epsilon.h5

It's important to use -n when you use -r, as otherwise the non-square unit cell output by -r will have a different density of grid points in each direction, and appear distorted. The output of mpb-data is by default an additional dataset within the input file, as we can see by running h5ls:

unix% h5ls epsilon.h5 
data                     Dataset {32, 32}
data-new                 Dataset {96, 83}
description              Dataset {SCALAR}
lattice\ copies          Dataset {3}
lattice\ vectors         Dataset {3, 3}

epsilon 3x3 cell, rectifiedHere, the new dataset output by mpb-data is the one called data-new. We can examine it by running h5topng again, this time explicitly specifying the name of the dataset (and no longer magnifying):

unix% h5topng epsilon.h5:data-new

The new epsilon.png output image is shown at right. As you can see, the rods are now circular as desired, and they clearly form a triangular lattice.

Gaps and and band diagram for tri-rods

At this point, let's check for band gaps by picking out lines with the word "Gap" in them:

unix% grep Gap tri-rods.out
Gap from band 1 (0.275065617068082) to band 2 (0.446289918847647), 47.4729292989213%
Gap from band 3 (0.563582903703468) to band 4 (0.593059066215511), 5.0968516236891%
Gap from band 4 (0.791161222813268) to band 5 (0.792042731370125), 0.111357548663006%
Gap from band 5 (0.838730315053238) to band 6 (0.840305955160638), 0.187683867865441%
Gap from band 6 (0.869285340346465) to band 7 (0.873496724070656), 0.483294361375001%
Gap from band 4 (0.821658212109559) to band 5 (0.864454087942874), 5.07627823271133%

The first five gaps are for the TM bands (which we ran first), and the last gap is for the TE bands. Note, however that the < 1% gaps are probably false positives due to band crossings, as described in the user tutorial. There are no complete (overlapping TE/TM) gaps, and the largest gap is the 47% TM gap as expected. (To be absolutely sure of this and other band gaps, we would also check k-points within the interior of the Brillouin zone, but we'll omit that step here.)

Next, let's plot out the band structure. To do this, we'll first extract the TM and TE bands as comma-delimited text, which can then be imported and plotted in our favorite spreadsheet/plotting program.

unix% grep tmfreqs tri-rods.out > tri-rods.tm.dat
unix% grep tefreqs tri-rods.out > tri-rods.te.dat

The TM and TE bands are both plotted below against the "k index" column of the data, with the special k-points labelled. TM bands are shown in blue (filled circles) with the gaps shaded light blue, while TE bands are shown in red (hollow circles) with the gaps shaded light red.

tri-rods band diagram

Note that we truncated the upper frequencies at a cutoff of 1.0 c/a. Although some of our bands go above that frequency, we didn't compute enough bands to fill in all of the states in that range. Besides, we only really care about the states around the gap(s), in most cases.

The source of the TM gap: examining the modes

Now, let's actually examine the electric-field distributions for some of the bands (which were saved at the K point, remember). Besides looking neat, the field patterns will tell us about the characters of the modes and provide some hints regarding the origin of the band gap.

As before, we'll run mpb-data on the field output files (named e.k11.b*.z.tm.h5), and then run h5topng to view the results:

unix% mpb-data -r -m 3 -n 32 e.k11.b*.z.tm.h5
unix% h5topng -C epsilon.h5:data-new -c bluered -Z -d z.r-new e.k11.b*.z.tm.h5

Here, we've used the -C option to superimpose (crude) black contours of the dielectric function over the fields, -c bluered to use a blue-white-red color table, -Z to center the color scale at zero (white), and -d to specify the dataset name for all of the files at once. man h5topng for more information. (There are plenty of data-visualization programs available if you want more sophisticated plotting capabilities than what h5topng offers, of course; you can use h5totxt to convert the data to a format suitable for import into e.g. spreadsheets.)

Note that the dataset name is z.r-new, which is the real part of the z component of the output of mpb-data. (Since these are TM fields, the z component is the only non-zero part of the electric field.) The real and imaginary parts of the fields correspond to what the fields look like at half-period intervals in time, and in general they are different. However, at K they are redundant, due to the inversion symmetry of that k-point (proof left as an exercise for the reader). Usually, looking at the real parts alone gives you a pretty good picture of the state, especially if you use fix-efield-phase (see below), which chooses the phase to maximize the field energy in the real part. Sometimes, though, you have to be careful: if the real part happens to be zero, what you'll see is essentially numerical noise and you should switch to the imaginary part.

The resulting field images are shown below:

TM band 1 TM band 2 TM band 3 TM band 4 TM band 5 TM band 6 TM band 7 TM band 8

Your images should look the same as the ones above. If we hadn't included fix-efield-phase before output-efield-z in the ctl file, on the other hand, yours would have differed slightly (e.g. by a sign or a lattice shift), because by default the phase is random.

When we look at the real parts of the fields, we are really looking at the fields of the modes at a particular instant in time (and the imaginary part is half a period later). The point in time (relative to the periodic oscillation of the state) is determined by the phase of the eigenstate. The fix-efield-phase band function picks a canonical phase for the eigenstate, giving us a deterministic picture.

We can see several things from these plots:

First, the origin of the band gap is apparent. The lowest band is concentrated within the dielectric rods in order to minimize its frequency. The next bands, in order to be orthogonal, are forced to have a node within the rods, imposing a large "kinetic energy" (and/or "potential energy") cost and hence a gap. Successive bands have more and more complex nodal structures in order to maintain orthogonality. (The contrasting absence of a large TE gap has to do with boundary conditions. The perpendicular component of the displacement field must be continuous across the dielectric boundary, but the parallel component need not be.)

We can also see the deep impact of symmetry on the states. The K point has C3v symmetry (not quite the full C6v symmetry of the dielectric structure). This symmetry group has only one two-dimensional representation--that is what gives rise to the degenerate pairs of states (2/3, 4/5, and 7/8), all of which fall into this "p-like" category (where the states transform like two orthogonal dipole field patterns, essentially). The other two bands, 1 and 6, transform under the trivial "s-like" representation (with band 6 just a higher-order version of 1).

Diamond Lattice of Spheres

"Then were the entrances of this world made narrow, full of sorrow and travail: they are but few and evil, full of perils, and very painful." (Ezra 4:7)

Now, let us turn to a three-dimensional structure, a diamond lattice of dielectric spheres in air. The basic techniques to compute and analyze the modes of this structure are the same as in two dimensions, but of course, everything becomes more complicated in 3d. It's harder to find a structure with a complete gap, the modes are no longer polarized, the computations are far bigger, and visualization is much more difficult, for starters.

(The band gap of the diamond structure was first identified in: K. M. Ho, C. T. Chan, and C. M. Soukoulis, "Existence of a photonic gap in periodic dielectric structures," Phys. Rev. Lett. 65, 3152 (1990).)

The control file for this calculation, which can also be found in mpb-ctl/examples/diamond.ctl, consists of:

Diamond control file

(set! geometry-lattice (make lattice
                         (basis-size (sqrt 0.5) (sqrt 0.5) (sqrt 0.5))
                         (basis1 0 1 1)
                         (basis2 1 0 1)
                         (basis3 1 1 0)))

; Corners of the irreducible Brillouin zone for the fcc lattice,
; in a canonical order:
(set! k-points (interpolate 4 (list
                               (vector3 0 0.5 0.5)            ; X
                               (vector3 0 0.625 0.375)        ; U
                               (vector3 0 0.5 0)              ; L
                               (vector3 0 0 0)                ; Gamma
                               (vector3 0 0.5 0.5)            ; X
                               (vector3 0.25 0.75 0.5)        ; W
                               (vector3 0.375 0.75 0.375))))  ; K

; define a couple of parameters (which we can set from the command-line)
(define-param eps 11.56) ; the dielectric constant of the spheres
(define-param r 0.25)    ; the radius of the spheres

(define diel (make dielectric (epsilon eps)))

; A diamond lattice has two "atoms" per unit cell:
(set! geometry (list (make sphere (center 0.125 0.125 0.125) (radius r)
                           (material diel))
                     (make sphere (center -0.125 -0.125 -0.125) (radius r)
                           (material diel))))

; (A simple fcc lattice would have only one sphere/object at the origin.)

(set-param! resolution 16) ; use a 16x16x16 grid
(set-param! mesh-size 5)
(set-param! num-bands 5)

; run calculation, outputting electric-field energy density at the U point:
(run (output-at-kpoint (vector3 0 0.625 0.375) output-dpwr))

As before, run the calculation, directing the output to a file. This will take a few minutes (2 minutes on our Pentium-II); we'll put it in the background with nohup so that it will finish even if we log out:

unix% nohup mpb diamond.ctl >& diamond.out &

Note that, because we used define-param and set-param! to define/set some variables (see the libctl manual), we can change them from the command line. For example, to use a radius of 0.3 and a resolution of 20, we can just type mpb r=0.3 resolution=20 diamond.ctl. This is an extremely useful feature, because it allows you to use one generic control file for many variations on the same structure.

Important note on units for the diamond/fcc lattice

As usual, all distances are in the "dimensionless" units determined by the length of the lattice vectors. We refer to these units as a, and frequencies are given in units of c/a. By default, the lattice/basis vectors are unit vectors, but in the case of fcc lattices this conflicts with the convention in the literature. In particular, the canonical a for fcc is the edge-length of a cubic supercell containing the lattice.

In order to follow this convention, we set the length of our basis vectors appropriately using the basis-size property of geometry-lattice. (The lattice vectors default to the same length as the basis vectors.) If the cubic supercell edge has unit length (a), then the fcc lattice vectors have length sqrt(0.5), or (sqrt 0.5) in Scheme.

Gaps and and band diagram for the diamond lattice

The diamond lattice has a complete band gap:

unix% grep Gap diamond.out
Gap from band 2 (0.396348703007373) to band 3 (0.440813418580596), 10.6227251392791%

We can also plot its band diagram, much as for the tri-rods case except that now we can't classify the bands by polarization.

unix% grep freqs diamond.out > diamond.dat

The resulting band diagram, with the complete band gap shaded yellow, is shown below. Note that we only computed 5 bands, so in reality the upper portion of the plot would contain a lot more bands (which are of less interest than the bands adjoining the gap).

diamond band diagram

Visualizing the diamond lattice structure and bands

Visualizing fields in a useful way for general three-dimensional structures is fairly difficult, but we'll show you what we can with the help of the free Vis5D volumetric-visualization program, and the h5tov5d conversion program from h5utils.

First, of course, we've got to rectangularize the unit cell using mpb-data, as before. We'll also expand it to two periods in each direction.

unix% mpb-data -m 2 -r -n 32 epsilon.h5 dpwr.k06.b*.h5

Then, we'll use h5tov5d to convert the resulting datasets to Vis5D format, joining all the datasets into a single file (diamond.v5d) so that we can view them simultaneously if we want to:

unix% h5tov5d -o diamond.v5d -d data-new epsilon.h5 dpwr.k06.b*.h5

Note that all of the datasets are named data-new (from the original datasets called data) since we are looking at scalar data (the time-averaged electric-field energy density). No messy field components or real and imaginary parts this time; we have enough to deal with already.

Now we can open the file with Vis5D and play around with various plots of the data:

unix% vis5d diamond.v5d &

If you stare at the dielectric function long enough from various angles, you can convince yourself that it is a diamond lattice:

diamond epsilon plot

The lowest two bands have their fields concentrated within the spheres as you might expect, flowing along more-or-less linear paths. The second band differs from the first mainly by the orientation of its field paths. The fields for the first band at U are depicted below, with the strongest fields (highest energy density) shown as the most opaque, blue pixels. Next to it is the same plot but with an isosurface at the boundary of the dielectric superimposed, so you can see that the energy is concentrated inside the dielectric.

diamond band 1 plot diamond band 1 plot, epsilon superimposed

The first band above the gap is band 3. Its field energy densities are depicted below in the same manner as above. The field patterns are considerably harder to make out than for the lower band, but they seem to be more diffuse and "clumpy," the latter likely indicating the expected field oscillations for orthogonality with the lower bands.

diamond band 3 plot diamond band 3 plot, epsilon superimposed


Go to the next, previous, or main section. mpb-1.5/doc/tri-rods-ez7.gif0000644000175400001440000002231712315325376012574 00000000000000GIF89aS`÷þþþþþ þ þþþþþþþþþþ þ""þ$$þ&&þ((þ**þ,,þ..þ00þ22þ44þ66þ88þ::þ<<þ>>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿÑéSȦQ±þ)\Èp!+P• Ò#G͘.W¢4Ib„ˆ @~ˆü$ˆ"F’4‰r¥Ë5rôZT +] s*…ÉQ¡>tŽ<É2¦ ž™‘(MjˆÎ/Zºqs”ѤLœ<}òÄ)“¥I1Z¤(Ñ¡A|ä˜ÙòĈ5f̨‘Ã&U¾¨©ó$J”ʳÌ–-aöþIéÒ&­8vü(²dÊ2mìü9 Ó§S¯lù*ÆLÚµmÞ¾uÓF™0[§*:óχŽ#_öLŠ 6ÿ¨,!b=†$’%ñ>…UêDŠ­]ÔA³¦­›7oÛHÿIEK8|EÂÄ©Ó&L—2}–Õ+µnåÔµsÇî¸kÍSË*¡¼‡‰&íiBÉ"€Ð‘FT0QD$ q„W„Á„8bÉ&t… &Ô¹’K1Ðh#N:í—A ÅÿäáH'¢dBHOø°ƒÿàáH(±ø’Œ4Øpó7ÙPãÌ1Àä‹*¢h"‰"‚äÇSV8qD<ä`Ü@¡ÿ’‰(0‡Bì Äÿ ²ÉMÆQ(BjSëAü4ت^c¼P…%ü@…ä gH„)n¡ Wü£s ÚàÞ‘þà‘‘ƒèàÎx殨E/ˆÀm„ãê8h:Ʊ h#0pþa!pÁŸ¨Å.fñFä [€BY}pœ®ãè†5žô‹[À"Uš„"q.þ6¸ž‚¦ð…6üa Ù…+&!)ð`!vp)nq jx#?².Ç7²dC²X…ùA=t BL0B|ðÎa9ɨ',! G,bb‚ðä°†1hA ´–µJ"üã xÿ˜**‹‹X˜â±œÅ)Úœ 8 ó»¸EIá LLâŒH„!ñ=С eèB8ýƒ@ r~°Ã¦pƒ,@#xB!p±gèâ–8DJ7Ö²Æo¸<ðŒ°„'Lá [ðBÊ€6Àx ó ¬‹Ç<´a @ø‡°È!ÓPH5‚ÑŠM,BeeÀ ‡$ Z0C!öÐF,q…à jjø‡™QˆŒçoHƒŽI(8a ñ|Ðð€¤k_Bš³@4‚­ Æ7þ±søâd  W†â‡úŒ¡`ž8ôa˜(Å+hAìœôà a@ÿ!áˆG<Ââ‰(½ö€;Ì¡gÃÚ ÂØÀ7X¥Ö9b¬0 ¶µ6 7[°G‘ò?`&Vðhy@Kv$c|°|ð„°-%s«à ° ®° ¨@  p) ¥ ¥iL'°"¬••ÁeàvÐÕ•J€Ð{°>˜!YªÐ ¯ ­es6Üâ…°Apƒ ¾@ ÉÐ Ð Ñà á³ ²/‘`ÿЃà›@ ¦Ð ‹0øóC`7P5“Ñ:¡ÂtD‰ð•° êÄN¼ ÈÀ Ïà…Ï`a%U—ÿA+5 œP´À İ Ò0Pã`èpÑV ÊÀ «` }€?!P#ðe°§@ ² Šðe€L_…ó1P€a°¤Æ™ ©7 ×Ð âPçpåà?0t+ĈP…¡P ª¾'Øæ°íÐë` u ¹ ˜€zÀ5 Á Q ™ {Ð`PC"ôdOgD2ˆ @ ¨Ð ×1 ÌP Ý@,â>@_ÛÄh`…@ ¡  ª°u w0’0 ´0 PEúÁè ÛÀ7Á€ w ¢à ™0 ZEßö,2d €ðp ÿ¹rÀÐ ì Øè …#nTp0ÿ`®` rÀ+ðÿ0òf Æ Û æŒå`UÕà Æð d ž` ·q°^K§pAV\1\ |ð§0 ±`TX0)ðiÀT± ΀ 8`5@X=°v Á„€ lè ’`ðÿÐ9[Á€ \¨ˆË` ÀÀX­ÀY+Ù‡yPìƒ=ð3h‰iÅ]eÀ”g ¡p ÛÖÿ 5±;ÙXM606H@€T l¢ ò ¢` I¸„¯Ð KÆ çcy¤~ðbv{@k í9;ÿPƒ€‚=PP‡ÿ@ A Ÿ° šðÕ˜ ¬ lX†˜„åâ¶{``ϵ“w `/vb~sAt`U02€+°  µ ðò‚Pi€1KКuhM(V iàq@vXKŠÀDM€C0{¶—v?Ó‚JÐn§\^0hÐÉ}€ð^`: M à óÀév‰À)\òI0!´g{$BPGLàR€_]þ)fp°f]ð`>ÆI°,©#RZ:OEO`60É`I»`Fü0Î qÐIj^ ÿ`ÐÿGÀw m€cVPHM ýÒ,? H¶—ÎØT°£ÒÇy`tn z]`Oð%™pX`@غì€ဠÌ@.Уð€ dàE¨-E¦Sq˜ ž §ÐO¸PZ)è <í äPkÃ@ £ ƒ© !  ”Pv€«\@€ºé@ÝP Ì >´Ð ' ›)›"g€p g¬S`Ð{ ™0Y/ør0z€˜ ¹ÿPoÞÐߎJË4ô ª®PB2TeRàà¶å Ýp ÐàoR’ ¡ ^åa€î“H;Àˆj…ePÿ ²@ §°eð#P! }` «À Ê@ãpè`ã°oÒ° ÄÀ äC œ mEÔAÁň¨ˆÌ€ ÂP[¯qÉû‰€tÀ,CÖd‡ù§ŸH`¤s°´›àƒÐ–ù-¨ Ø¡ Îà…5› Äà -§ œSB‹P~P/\â%`­°¾ŸPA‰ BH„tt}`nP\ÐAð“eÂù®BÀY°ŸÐŽ `;ÂÒ¨‚#X‚ɤ ,ÿI¯ÔÅwkù]bå·3kŒk°Ip*€ q ¬P ³ð”0m`:M`Õdø'¶bpv7v€{ N…åd Š@ÔOÐ-Ê a ³@ ¯P ˜ðxq`=v0]µ}Oô=rD@à æ°ûðÄÐ œÐ€`1«yHfU{·—'‘KàP@pÇ\iðtºÜ¨u '8ðW±  öðÍÌ@ ¡ £3©q°… Ÿà ÃðæÐ à ~Pˆ1†P ÿ€ ”àˆ |P©wXÐzL ,Eà Ñ©>ÀŒA@G {Wÿàfàw   ©À ‰7ÎÀ ˆÀ]àlmó• ¿Æ_ « ³  äðúð ²°Ip0µÿ`u Nƒ€GVqàG ÆXPRðpZé\ÀD9OõD"c}‹  ¬ Ûðý°ÂÐXð°+P‡%¤ckp9 ³p@ ¡ là ‡[°!Š’‰€† Z}ékðGlŠRÀ_?7pÇ¡Ÿ ysP“žà ½  ÁL`0„3`í„€ m?zQWt Ì –@ÿÐÇCpQ`Ôx0TX –p –ÿà0ŽZ¥øzzs\ÇJà*YF5ÐZ3##C*”Ð ¡ šÀw D@Mg;ˆ€KÝ-nS 2igZ@3nÐoPá!8R §p A S €ÑÝ8CÎq U|œîjd‚Ì1l`J»¼‰Ì$ÝnÀ½3A ›Ð¦p <ðÞZ0¯(›{g]†€Œ ža ¬ð«¸ ¸` ²à ©€‚Ð  p ñ¯ðÇ ÑD°®qQâ:rw w„æ…@ ` V ´p ¸€ 湟͑qN„À€’p é´N ŀ É ÇŸÿ ¨ >‡no# ²  ™S75tXì}ðZ6/ócö|Œ 4³f˜ ¿@ ÇPèÈ›öJ<èûèdW˜¶Ì Õ€ Øp Ôð Èð |ŽvðE­} ð •0nÀÿ0­Œô#nÜ4¯ÏÑ’À²ëd «¦ Ï@ ×€ëÖ@\h˜q€móèº É°Üã@!ÌoÆ€ ¨`.øƒàIÀŒ0 ' ºÙ¬"gçH(®‹£Ö.äܧS2µ¶Úð â0ã·—V9Xo 6Œ0ߥ`–È Ó  ó›ê ç Ùð Á ›@´ÿñ€B€ް ºQÿÀkÀ“H¶×Œ&+l ‘à6ª ¹0ŒØà äkê€Ìh!­$Ï!3n¾[¡Ñ ÅÐ |ºíp¸,ß ¿à ›pŠúZ ­P  ~àó(!³—”aŸƒðñ¹3s³°   Ò  ¯æí@ÊÁb`}O ™Ð ž Íi½p Ñ "§;9³v9Ã` ¨° LMäµ[ ‘PšLC G!Ÿ¶Ë½ñŸ ¤7º@ … <ëàâ±M[`ÛWä{ ŽÚp ñ Ìð;Á3<ÅS Ë ·à ¨0  ð —b ‚‘*«ÿâAÂ¥Bcð|:¡ÐY‘pqø 7q Ó€ëÀŒÊ\x œp[ÿ ‰° €(¡Ò•¬Ú·sëÚµSWî6hÈ~ኵªÔ'L‘²ÃF (I†üðá#È'XÊÌ!déÔ¿/ïÀüg&O#Q´ˆEãVŽG FR–±£è­]³4Õy#D ˜z(¥Ú¥ÌÚ·réÔ¥3'Ž[5gÆ~ÝzuêÓ%G…øÈIóÅŠ“#A|ðàñcÈ*aà ÒôO—-Q¶Ü !fF£l›Ö-GŽAŸd1óoÑ'U§,Ý©bƒ ÿæ0 5K˜³kÝÂÎ6iˈõªÿÕªT'JŒésÆK•&F‚ðБC‡"Kªèý— •ªN‚Àô@!ÂÌB›ZõRF Ç9zIòäß>:yªD(N.bþ š$ ¯bͦYÆÍÚ4g fZX)Å“K I$<â@ã‹+ž@b¸ÀÃ!2#š âŸ:Ñä“L±£Œ.¾XãG:Ya–ÁÁh°A¼ ŠøŒ<$1%YZ!¥¯I,餔VjáEc’QÒaz¹%UHñ$JQ¤@ô˜ƒ 2¸ ‚‰"~ÐFj¸Ð®²€CP^™S:±äŸJ6E•Yt†‡h˜anØ!ˆ$` $ÿVl¹e–D餓OF9…•Xj¹\l™ÅTBÑ„G1¤BJä=èh£ /™ ‡j˜A†füÁš"1…–\jùçÀõB1e•Wh‚üœÁLŒˆÂ 6þIäŸK0±¤J(±$N@¥”SN1eŒ"Aä;âh£8îø£DAd>æhËŠ&Š€UV@oàaˆ&²8Ø,Áäl)©“M<¥”%^ÍÆâ(²c 9îØÃ@!ÄDd’J,AX’FÔ‚CŒ*”ˆ)Ðð#’NDEH ÉÜ0BÌj1ŠhŠ/ЀÃ=úø#ÿA A„‘G$¡¸"€Øá»ðx¢% °b 0È8C véÀc?1‘D9d=àc‰4€i†.hzÆ\PÉD>Þ# )´ð¸!p‚Š,¼ÃŒ4Øxc¨ý¤·$‰8v¨«F$–p" *®ØÂr3ÖxÃm>dAþȃ +þ ƒxHiîéçit1¥Còhcñ(” ˆvÐA|bf%š€b +´è"Œ2Òp£c4ÀÈbŠ&(B H*é „¢ˆ#’Xâ )®à"Œ3´az„!!‰Klâȃ¸ð…9PÙ0G8þQ RT"~ Ãÿư…*€ðàlÈCÜ!@ðtxÃÌ /lá Tˆ‚|XòÀzس ž`…C"~Ѓæð6¤á•^Èœ€„!ø@`Ë‚ÿàK½Šp.ŒAFta€L– —= âuC„!r·‡UªK g ¶`((¡k<¨Ð .4¶&X‚’x#QˆAâ}(&„/}M¬L7ÐÁ­R"7ä¡Ð( ?À„„J¨‚àÀ‡B4B•¸Äµ&‰FˆŠ„ô(f GðZÑŽ†œS”BžØ&ÆRkõÌgÈBŽÕ§?ÕiJcZæÀ‡A b‰(ºÔÅ.w!"˜ˆ”)ÂUŠQ€‚™¨Â v‰I$‚lðBŒàð‹8àÁ-hñŠU˜"žX‘`B SÐÄ®?˜Ø¬–…4ÿ"0 \(Cè ‡?¢T„(ÉA M„®˜…-0u‹ZÄ‚§ ×£î[4‡&I گbC³P…(6Q Iü£¦€Å,^ EÀ! 0ùÁ׌&£ŠA²\ ˆB(â”È„'H¡ŠXÜ¢HRR2˜Ä‹ÚÜÆ(û)Z!‹X˜ByL‚ЉÊ(Ë.VÑ Gôá_èQ‘‰OhBu¨op¼FMkúò M‹C‘H\Â¥`R‚ gì§?ÿiF1x QLBqøÇÿâ@ˆJ|8L’ ü‚‡ÔPF/Z±‰B¤á. zAtÿB†#Ä?ÂP…ˆIÓ8ÖÌP¼p8èaŒ ÄŠÔ b,CØðÆjZÓk8C³#æ°¡ÏØ  wp‰*>±‚1Î^Ë9º1 cØbŒˆƒþ!Ü` …-tአBoTXÂè²w'TU(uÄ%>qŠWÜâÆpF5¸!sh%±†2v‘ Jè!p% žPMÌ‚@¡øÇˆ° 4ê5„Ñ -DÁÀÊÜè‘8Å,dñKbeøu\æ7„$@ b`ƒ‘ˆ±~¢«ˆ.~ h`+êXÈ:Îñj$C¨  N“7$B² Å?8¡<¤ ÿQÉܱŽrüùº`Å'&!¯Eü£/¡è„7,<áp¬Ñ¤°Å8ðÁ°„& å­ÑÞ"˨F7ÊÁnw°ãà¸3~‹Q\"¦‰pLD‘FbgØ‚¤w|æØp1t%R„âD½„FþP5|8FÂ~#0¡ &ÂC!"±‰P„‚¹A„" ± TØbÐÐÆ8ÒÑŽ˜£CÚˆÆ1zQ S茰TÒ Ú Šìn‡»Ã¡ i(CIiÅ)B±‰Ü "o(æ°„®•dlbƒü QÄ&™øMÀ ‡Cl¿hF6Äv´ƒèÿG7ªQâ^Øâ©…œaˆz=8ÿ9Сuœƒ¯F2‚‘ YôV溺G²@pKû@HˆÖÀ‡àæB«p„€‚¬à<„Ø,‚ñ ÛŸú«‡6¦Á bà…¹Ü„Íc•Ïëšàp` qøm‹c X0‹KxCè:Pƒ0 $À±âÐñH)è‚‘RX…Acƒ$p@ø>oІlø†q ‡qn°†ê]È>QÐI؈;h2ð¼ˆi®hàl¸jxe˜ áCPÈIXB¨—5-0ºhÒ°Šúä047„Jø„ÿN€„>P/è‚Ê@L8Z8·g †kèjˆf ŠP…Qà„J8>?°7 ‘/éš(dP’c †_È…Y`SØ™J€F8Aà;xƒ3p ¸¨-Ÿª˜ã˜8ƒCQYÂKø‡IÀP@XÀ_ †cPdÈ­]¨…W@Qà„K`™D ?Àƒ8Hƒ0ø>™éKÁ¿‚…(‘HX„`Ú¬AH¥;p(  3é" ‰Dø„WȘ…GRHWÓÊ\H-KÄ0j'R!„„òƒ<À)/$8!S PÀ¼E-qƒ6xƒ:àBˆ®:D6Xÿ(@¯Z±‚$()£“ƒi+–2¹P ³ *G±„´èƒ:xƒ6pƒ9°°CPE8š%P™õzD:`ª& ‚ȃ;`„Т8JH„>ˆ3ØD£1%˜Êr:È>A(„št„HЖ–ª„HX„AÀºŠ‚#À¶,pƒ–ð¨³:¬û*X§D@c¬3˜‚˜0&  hè1Wð„G„¡ã0”&°Á“`)À‚ñ)4Xƒó©ƒ<è@º•@`Ë-ùû‡%š`†5J(„;Xƒ/€ªI(>€ƒ/ø‡Ø€ x,h´aX‡ãùa`MX„§t /Ø%Fú9J&àŸ*À‚4`ƒ8¨ƒ¨Ü?ðËÂô 8$ØYø}€ e˜P€A¨ƒ4h? ·«„LøIºê6@Vp†q8‡à…TЄF„;p3ð‚+ˆ‚%8"0¡"J¡Â%`( Ëƒ4pH>Dø,†ùC˜ƒ0Ø‚2ðƒP†n0˜p…Oˆ„B؃8;mpb-1.5/doc/diamond-b3.gif0000644000175400001440000013225512315324631012237 00000000000000GIF89aŠŠ÷ÿÿÿÿÿÿÿÿÿÿÿ½ÿÿ{ÿÞÿÿÞÿÿÞ½ÿÞ{ÿÞ{ÿ½ÿÿ½ÿÿ½½ÿ½½ÿ½{ÿ½{ÿ½9ÿ½9ÿœÿÿœÿÿœ½ÿœ½ÿœ{ÿœ{ÿœ9ÿœÿ{ÿÿ{ÿÿ{½ÿ{½ÿ{{ÿ{{ÿ{9ÿ{9ÿ{ÿ{ÿZÿÿZ½ÿZ½ÿZ{ÿZ{ÿZ9ÿZÿZÿ9ÿÿ9ÿÿ9½ÿ9½ÿ9{ÿ99ÿ9ÿ9ÿÿ{ÿ{ÿ9ÿ9ÿÿ½ÿÿ½ÿÿ½ÿ½½ÿ½½ÿ{½Þÿ½Þÿ½Þ½½Þ{½Þ{½Þ9½½ÿ½½ÿ½½½½½½½½{½½{½½9½½9½½½½½œÿ½œ½½œ{½œ{½œ9½œ½{ÿ½{ÿ½{{½{9½{9½{½{½Z{½Z9½Z½Z½9{½9{½99½99½9½½½{ÿÿ{ÿÿ{ÿ½{ÿ½{ÿ{{Þÿ{Þÿ{Þ½{Þ{{Þ{{Þ9{½ÿ{½ÿ{½½{½½{½{{½{{½9{½9{½{½{œÿ{œÿ{œ½{œ½{œ{{œ{{œ9{œ{{ÿ{{½{{½{{{{{{{{9{{9{{{{{Zÿ{Zÿ{Z9{Z{Z{99{99{9{{{9ÿÿ9ÿÿ9ÿ{9Þÿ9Þÿ9Þ½9Þ{9Þ{9Þ99½ÿ9½½9½½9½{9½99½99½9œÿ9œ½9œ½9œ{9œ{9œ99œ9œ9{ÿ9{½9{{9{99{9Zÿ9Z½9Z{9Z{9Z99Z99Z9Z99ÿ99½99½999999ÿ9ÿ9999999½ÿ½ÿ½½½½½{½{½9½9½½œÿœÿœ½œ½œ{œ{œ9œœ{ÿ{ÿ{½{½{{{{{9{ZÿZÿZ½Z½Z{Z{Z9Z9ZZ9ÿ9½9{9{99999ÿÿ½½½,ŠŠ@ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠ @€ ,@²¥Ë—0cÊœI¡1Y†nY‘åÞ-t†x΢£ŠÎ*7£Ò|Ú±@= 9 €AA“5³jÝʵ«W“=vbÇÊ-YèüÜ2„NÖYpªd¡%K8?~Œ¦å†Ô8;–6}õUU déµ±ãÇS¨2êÔ°qþºÁ“†TßÎ}ÝÐqsÔ³i7­HÓIíÙTà4 fGMo£D,P1Æ'GN¼xq¬ ¡z€¨nG•úíܸg3µýÚèÔ€V‡ÿv ˜úT”´ºØ¸û÷ð= ÷\%ÊÊ£˜~·zÿ(5wmÙ ˆGvÖ– ZFUùQåp ýß…n…œFJ8Ðr(¡±÷ÛJ)°^bé„6÷f[kš¹fGÙìp j;Øáœz%¢ц&©dCBìUaÿUeä‰ÇÒ}B×Üy#vÙ¡CVzˆÒŒRAµÛ%xæ_ÚÁšŸ¸áޤ¤1§œ;x†&)@€¢%‘TZ4ß’„:TN;ýtË- ³¨,¸Ä5ÊPªô%ÙVfTÏ5I&—.†%¨€šfoÌYÇff屉&`® ÿaç_@¸ç¸æéÆ3y¦Áksî` u®ÄQ­që_eî×Þ³ Zè´Ùd¥Ê,qmÛ-\uÝU×,~^'¡Õ `œàVƒ$JYä¼òv)*€ö¦:› ‹Ú±tˆcÄPâø›+³.‹cœ¿îª+¯ÍtÒÌ͸‘ ×LÇ]icˆ:~¥w‰ƒqÀª%kž€5Øl¾Ð*„$µ4'díeܱ}ÒÙk~-ë³)ã—ÆÊÞ ýšŸ°þ©o¨­µ÷nú.wµ1=«g¬m½nvjµ€Ùù©°œx– ¯Ý ´Í¶ßŽw\²p]ÿCò(v«rÜ6CGx­(%§R°Év'x~ˆC¸!«@–µ_`aÍ5ß ™ÏHէ鬦)Àús+t"Ÿäˆ§Žn;Ypv+ºæÚš¿É6yàré $uCõñ§ÞtÙåº2ïuâq,jF¬yõt\ È(¯Â½Qâ!}ôâ 7>4hw b0±i¸z½ $m|ÆüS¿ü› CæN¾ì¢‰¾ZÕ\Ä%²1;d›PÇ5]%KmÇ2B+ª„Z, rË`öÖ£U¬&HCB‰‰0rª¨­H :]`P“2#¸.F@ûrå3³i§I®©MÏTº?áëSŠ_Ìÿ‚Ã9…Lf~I^ˆ®EÊ7Çb ’G/!ÆAä¡Îz×;¨b<ÀÖ 5Ok«S6Òf±â_vxÓ–ó•ÀˆEC¬ÒŠTÒ©éYï.¸` Z~â-Z…|¤Á €p #ì.ÙPÀQÒ¸8¥Õæ:ï›ó…%ãM‰#›+¢1|Ó¡N`9QA¥Õ óCªð!J|™´¦Ú(!Müš£°S+.Ò OÀêmô¹S:G—ϱeÜE—‘*^¦:‘ØödCââñøE6óñˆ|hó›ñPT¡T¥:Ì3 ƒØ®0؉l¸!c&ã˜<¦C\ãc†ð8þf7q4rj›ÙCáINÀ»¬­—»¬år‹5\ZïÜ€´îÍNãyÅÚX±g µ«Õ«^{ÔZ/ÿÊɶ›…SûVXU7¨ïwKq_”¢™Ç#½çŸSz%¾.£éäl¨CÝ­ Ö»£½É˜åä¦ræ5AèjsÛ®‰1Œ‘~h+8Ü ’Ý.wáÖà‘S×áÁhÁ,ããÜðFÉ‘ dÜØQ‚%\ƒvé}³lS°_¬¦¯y‚l{µÑ<í aÍ«j!§là–&MI>‹+ävÅ$(1 e—3`VПQk‰,Ù oÄ¢pL¡d®él½MÖ€±'ÕøUO¡I\La÷Î_j8ƒ‹k-0Þ•v)¨kÊûz¥ôðñ”?¦×’ê»6þ¨`á5Bš'É6*®ÿGc,@xÉËš>ó9,9FŽÀ.»RÊœ‰µ¢±öæP”9rêA!»Ùb¥#ÍLe>YˆŽ"&nEbiEÛÉL;û× ±ÃRv¾ÄlWí«Õ™½;Çyó¦ønl§ŒkÄl«]Ͷâ}µGñtå‹–yØþ"Ž*êÀ»ÄTa&b…¨ˆ%^&æó pMû›ØTEZp!‹õz¦×Hç(øD‡ z+(q"JžrÉù2 Ð[SËæHL{Š UÅe K¦I,:ÐÂävÔ6áÍl†sœè·*¼±ˆ]ƒ@XÛ™Õ\éY’‡:l¶žD¤I`ìÿ­Þ_WS]ƒ8³å³´ËLCØ •‹¥ÅQΡMu9 :3ÝeºMÞà&d‰€}üC5ÖÄæ#ŽMm²…¸ðë<ØÓsƒÏƒá1`„àÕšè¯ ¤üíXÙeŸ:€pžÏåôÖƒåt:´9u©?¼Üh‘Å!ÐB¸QÐ{A•kãÊ3t!èñM)ú¾|fQNÍ®ËhÍo„QÛZ™enªÉ¼á»Bz’ix£¹w,»@[‹åú ·“™ÿRÆmÛÁQÐô} ÆŽ">PO³u: eØó`ê$Ù½}¸Ÿ,;MÎKk‘Žyl_)Týüe8èÃOgD¤ÿgJA¤ìÅ¿üë*9+L…8ž;×0„[ƒTˆÊöµSöÁ0ëÁg¨9r@ Cá'] ³5^ƒl±FÏÐf×@^Å$ƒX#9à@x× n|“k?¢zh[cWe l¤2,äæg²á'nU5`eŽ!}¶\úÒvmÇb=×sAtqÞ“x½ÿà|R„e³;ãkÓIÖ„|2[#a ˆ¶2òç0V¨+‚½C]Œ‡iû†]’B ¦_þ¢qç5FøGIkãA¥1¶_¯§ ÿ °>½åO¨Ze”8nèäâ_|ã–ÒÙEV–vH7VTÿ1ÒG&1ƒ E6žÕ$=Ó]ºb,¤0 lè…>÷2†Bƒkwƒ¯¢„4WzWØ0l ±€–{m‹0w[Kµ9ÔoCbO,h5·Kñ—€&x,öð.´A¨wæ‡,¡!‹S[«¶+kè#T689$9àc2ÖENÕøô>üDTÔ%(aŽh58áXWwÒ Ê’=n kÓâÀé•X†X‘ãØx8ôØ@W`úÀJ½HLM~\èd X1â gÃq04Ibt^9lÔ 0`£×+Á²Y›•‰$©;v‚’Î$½GSÕ‡Çr=ÈAëÃdóÔÿ[cä€P08êPÚ_ù^7eS²æ='Q\¤0ÔžH8!C2å·I¾¡ïV¢b å&œ=™(gª 0öèV‹%‡à8„xSX/s½’Qlh èŠKékÆ–j¿²5€:­r;÷[‘å—ý†5mâb«x“yu,lQ?Âp|÷p·Pè00~pxF 8s¡p§wåRYF اvå;; d«0Þ˜=t`ÜÓ©Ù@â—s•—壃Сiq•4a!çÈeh…˜½SC憺7tð ¤…ã£yðT€AØ¢5Wi0„¢G'½'!ˆ[–‡²A 6š©ÿø*…läU‘ÙãFI½÷6 øf!Ó™}—pr™à“”A• ¶*îÒEçx!§ ®’&fò*v<h1Ø3A¿s{)¨‹zI(BÔEŸt¡3³g§V/Ös1ÞÓ†Ô ¼ö kÆ·-­iFh’š¥—îFóÇ#üEt–˜7ƒ¨ã¥v[XFU2º2´õCøQ¯'@RFʉ|J&~ŒÓk*µI.RÚµ·_7E_æ6 øùœ=L¬i=þÕÓ“QÃ$P[®g´e£`ßJ:ŸŽÚb2Ç@åljóŒØë0È¢,ÕQ¸yÿæ‰ëÈKZ©b†ù»Þ©˜Ã6GûWÛû@¾õ¢¼VS{@ðÊ"š¼(®ÁX½]È5Ä™œÇ’q2U‚ÿ² ø–¹J¨[I¨‚Ú! ŽgOXj"k`pçi²T ´"—¤fë)0€5=i;ùfnðfæÕ†·%$uT/Q³œÓ¡VÃy’éƒ$79g:Lctà’/žQ`ëŒ(¸Æˆ˜"A$Èa zzÇñ‚"Ù¶'hkr¯k ‰…ëNÞc>5‡²F.ƒcS±ú;ºK%[{¡8mU“ˆ·“3v•QŸÇ;B“0› Gñ ¸³€ª@Ÿäb,q„&¦äú0¾´%d*áŽGµ0å]\c ­>If|C 'nXgÎf¼, %W OÎÁDØx™t®Žã@ÕcU€ígsv 4ƒ±„x g³€M@Ì€@Æ„!a vÏ. -çq&"ÍhŸÿ±Ç;¡q` “u„ ¿«[A¸Lw;G•»’sr¹}[]›TÎÉxÀçISCÈÊ"*ýú€­/ÕÁÉ«ˆ/" b:=´ÓŠU£9 äÑy¤®' ¿m“ÂT&{z‚]'§5!ËZ×ÄqŽ4œ#˜ ÆbœV»J“e¹q# Am7_ gÊX¢›qg'¢g1qÕ-­×˜ aÕ"m!Ô¨c Z¥£jÎ¥ÌTŒzRûÁBLWÙ²M3À‘²˜Q ´çnϵ3³²¸ˆH~qÄ||,Úh- ÚÎÓwÙ³ÝÜJ"}Ö²äÒô¥À c $©+uBÌ3e"ÿx#N Gˆ„cÆ%¤¸ðìÜì×-K.åHq%}ÞÆ´Ò³ÜÞ^à1 ÂÀg°ì±màþà-QvXx á~á^1(sj?ÞáÌýá">â$®!ë]â(žâ!Ë@@`³nðâQ¡)@¤â6~ãF„²°¿há´(ãt‘R‡@!•Í×aAã ŽãNÎÞ[rYäߣ ª8t`,ZÊWýZmû|¦d×O~æ5SÛZ’ÛžI¸ µxv‚>§]4·âqrÓøBÇhÞçJÂÕµª]–<ÖÞ:ʧJ4Bÿ#Yüû>ød­1à~é·|¾Ñ$©%ÚˆœÁ9ëÉEµoúÅEØÒ¦Î²Å’~ê&¦¤J"òoÕ–c qŽ˜ÓÉ·}ÄÜq6a=Òa†Å¦.'Žêb ªà‡àP@Nå>£ðⵡ)¤Ê%b—î‹ÏèÒÚäÐBÃ2‚Rº*Ÿe>—‹jŠjX6tñbæ1§ÂžȈ‡¿ AŽM²`‚ôªÀ僓žÑìIçktÑ%ö;͵S$ahÍàç°Á„ÐÜ|'])£xýzzÊèz°ÇX1Ô¤• }$–!ÞîáUÜî§á:o4 ‡äåªQ?LZëÿ?K5>E›lð£âé/9ç\S=×38”䜟°ŸÚIr•WTèjç¹1‘#œÊ7ý(õªwá=äŒ iÓ´Ñ7&"ºìg>òH‡–hƒ¢Çz¶Û.©îÂsL¡¶Š®Dæk¯Ê5ÛdO&³°<¬!Œ³C8ÎŒhÅ¡4ÚªË@ä¤+B¼æÊ ¤ÿ¼šI#Œ|ÃH8#dCÇp QÇI/Lj2‚PI7•<+¥@*— ,@‹£ÐVÒ˜°.!ª9 éhH]_t°%T¤Þ-´XC?*IÂúB²Hw 9Žö"Î`5Ì<.± o(2ÃõÜ¢¶«ïT™†Š2Äæ¢%pYŒ8Ó”â CÐ/‚Žôèäøšë·ëm¸ysãà ‚âUÔˆ(UeRtFA pfÃXp€¬-»bÉÏ~IŠc¤4Á q¦C#Vñ#?¥Í÷/–BE(Úµ‚Ý7¤W…\EÏF=öØ4ž Ø¥ Et$B?«-ÿï‚Ð8•H*)óÚKq{"7l²u"WMèÚ]èdÂNþ§_zD”ö̺1®ƒú²KÎÍi]ÇKÃîE9zfÕƒ?Ò5ÏŠ8å5¸UtR·˜{]PÖÒø3A¾ˆY°Íè·:Gj JMrM—`Úo ­³ysVE 9YD9ºz™»K`ßvÈíáucàlé )³Ô½-(°2f¨±ŸOŸÌ^i{Xç²[ÛÞ…ÇË`‚…3FfA’¿Ð%žÎµ;̤Êʯ¼:Û=G—÷ûV‡êå= Y ò×1˜M¤e»†*$4Ä_ÎbIΡ½”ndþªÿ„•4ñ çœJØp@ò›Ý 0x#ÌFÓ~s-¶‚y.ÉWø¦”íü CË)æþ! ~ÈHJ×ûÈ„¤Eè0Ä,õ´a`;`¡µe‡ÆP¥uö¨Î|öf”¢‹&T9™Ç«ÁðUB æP#4Ž, Ú¬¦"9 /M3– —‘BD‡D8Ö£Cf$8tС¶»ÜAqnnœGÖ@(J­.F£àBÞ(Pš®“bΛlˆËðÄ%B`Fô!#tŒæ±4M,ã1£[Îb‘ !e‘1sܪ…!ªgDïtç>‘ÙAœ†À˜¶°²-ø"%©Öÿ„™¡ää&çJeLXÙ@|&4§jašÔˆ&hM.stŽbxÂëÄ30g4’õåIFz[D˜ûÙ*f3“Ù3•?mÕeûìBéH’H­jQ;ŽÑðé½jaÎ K^8h&j‚²·žƒ¦¡ (!¦ÛUFx#YàÂF1¥Cè‚ä+Ó©„šF „Lï;øAW~ sÔ!Þ¬”Q‘ÙлpÆU-šÈ0Ñ¡#Žaµc½ì‘hQ¹ZÑÅBøÚÙJ.$Qº DXIòïÊ)·l¤%Ôoô§?ºç@¡ŒõhÑL8‚‡ÄÔA‡L=ÌRtP ¯H‡Éÿ¹x„UÏ0†ôaB¹œ$+RLA"³Ëˆ$A\›R­Ù-ú å§@ýJw´)*µ®Te-kAœ¤³R¹nCn[„쨓‘–®¦Ð(_4J!\ÅMs% T_ïòÁDÁXJ#àtÅg]dA1BÔº]ï„hîó£;c $õˆÂÂ5y ?ö,“80¶KJí ºœH‹þá†ÿb¢—«8f„LŬ68} W÷¦“¢k›7üZOVËZ¥`m€Cj´Ü…2I¨YÓ®E\“iÈ=ÆÈQwسžM˹2¯„tG.êº;~.îXíª8Æí+“cZçäÿ¶JMå0¼ d¼È+F8D€¤Ê*Òc¹é A–´{úx#'l” }7¯žNÉ×T› CT6G©BŰw4 ýÌONQËSCd–FýfŠRV¸T¦ä¥¼Q*¹:êªRˆö³Jƒø ÇvÃ^hÅ»ÎìZ™žrp6"ÇOÏÌÓt°•î8X’?9Ô?:}‡ŠÔ³“±uAŽ¿þûŒÊÌnºªœòì&ÝdUWxÀ>`|% àh" ›!7ֱЌXK³%‘$-;‚×1Dõ"ôÒ{Ô9;Œ>êæäcà½1Œ58$ èŽ-pbõ­¯‚ƒs»Föë-ïòH€E°àIÕÿð²ÑV¸Ýd°{ˆjPz å]«9ä?Bø'xé×O ‹ƒ“”Û®,‚cÄÃç®Nü*•‘BrÁY78vIÚ¸œ£¸KEÉ—K1àëuž2"ŽšAI$ÇÜÐKR"#8žs¯Æ"8‚S`õgVN鵟`OÜJ Q÷£Ùqfô¬Ñò—§Ð}nñC´M,¹eä!ˆ>N>/Î*âš^ Í£ÔpÜ'–l­Ë±íýã,#9Z ‚Com7vß .Ô·Fì-òñˆX®&˜gMŽ@mŽ™8«ÉÒÏÝà|Ý6p̳ ¾ÚVô5[™þÝ#ºÐ›§$KhYÿ=Bì«§é±bч)˜S†)4K±‚JÑüšˆlh»Á’ºÚkÀø\{¿»Y‹š6Y±¹;\¿5{3 “Šy*± êÒ1a«.ÿƒQ”ÞpÃõ ¡ƒÀÞK2ÙB@ÝŠ’ù8—ù>¤(Áô)}Ø}0†AÔ@$Š0º‰ê@À³`¹:ô½R"•F 8Y#„23C¯ÿ‚/û²/ùb;†é˜þã**\¤t¸11Œ`»‰¸‹h'L#¹ÄÛE ³±@‡Ú ¸@à( ` EQ¹Þp»µD‚˜SºÙxC0k{À„ıâ=ÚJ2&[2L$¯°C=„ðÃ@Ì:1AÁ´ÑD})ð3{±™/œ-o„Žêh—òÒ8í":hˆÿÊ}ø¯¡Û´ y•l¸'„¶}üD œºM $qà#š#;­ÿKøFi?Ž“4Ç;.R0ZxÆ!¹9(ܾ¸¨ŽÄ>lk°U‹Ijº6ƒšþy Gi,ú ¢A¦(A¡º0¢Ð: Ø°R!£lC+M«}±™}ó$™Ä¶”H¢ÞJŸÒY…!;·OIi Uø‡)óS1ìÚ#úŽ™2òƒùšˆŒi¶Ðë¿U˜ œ‚¨ÞÚ5 ›Yˆˆx«–ãÐ)žÒJìF;<Üs¤þˆöƒÉÃØ—Ž”Þ¢šæ©Ú1µ£Š®q ;ÇžHDqQG¬Ø=åS‰×S(´‹¿;N¿ÌÊ¢Ô)Ã)A Žè˜uúUX»Ž±9²Š4Âx2ÿ×D¨VˆŠp¬®<ÎŒ°JÕÔ¤å›1zÙ5»©Žˆ5Þ‹’×ÒEŒl´pLÔQ›ÚÂ6G"? ;„Ó3¨)b¹è[Àˆ ©x­ì JÏ|žŸRG˜hƒ…¨‹‡U!(< „)–ó4„a9ÞéÇõA—ײOíÔ-„ RšIK½Ϩ‚ByIŸ á“ïÉ$ÜóÂ’P µH7 Á ³!*¹GL„Pz<9™¤üñ¹9Ò#@Pñœ9ʆØQ)â¹ ±Jm£ šà ø$ã›O#ÚŽÌÏ\­„ÒQ广Û;(€ßkŸ¯0Êꀴ*lEëR¨;ZÃìPÚ©¬Äÿ$‹3_äÌ¡Ò 7‰’¯« ÞS@úÙ7ê»”äÀœ 髽ÊG[ªì|­sù¢²†$UR ’O Ó¡êȉ÷ԉ׊1á‰2L;2ø‡óܱ5\/YÁ ÑãF!ÈF€IÜ'lÑ=Q_¼ÎLô=hºUÇô™,iE‘ÑŒ`‘Câ*x²OñªˆŠÎ7¡dTfmVoCùQµ:)ï";cؤQU;0ÕŒøݤиªa™B‡G6Ú  .T«4íNXTqô,ð±²´Ó ÷+äº ¹³C°ª[8‰‡µ\øŒú©ŸmKÖ²ADg}X ZÖ1aRÿ™ _­•´‘P0†Æã„ê+3…˜É*5š;7ØœÃ`vUJ}+@a(™M"§TWNDœ \ЋTÝã ŒŒ¸–M=ŒMµ Ç@Tq1Dˆ]Z¦-¢RL…¸HÖåY©ÌZks’ß; °Ã’5@Œ$¢4¡¿;[…’&té¤}ØBlZ¹Û {>¤Ôo» 7I©ut±-PskNLë¹áʉˆM+FuSÜ„ñKè“Û‰ -mVc7º½\̽Üeb* ÙòÎǨÓÀuÀ\›:Ã-(Œ?²Ó šYÐJ-âsØÌ]Ú D‰}Ö^ŒSzt‰¡H‹ÿÿXÌ—OŽóS≚³Ë y |‰°=¤°·%¥­]é^êí ü‚+ÕÏ»” OM¸±Ìù¬\±IÙ/Ï“ø²©„½Š^|Þç‰Ûê_ù­^GÕ'”ºíI"cÈ£íIƒké¥×p UÀvz„MÝTŠã¶ˆµÜù` ž`îÈŽöï¼£-GÔrßï@Äú¥`a6ŠÛÕ Ð|ŸÊ=ána~᤾E5a†a¾anØÎ5Îaþa b!b".bF a#Nb%Îa}ÈÇ€ d½:èá%®b+vVcð-¦? Y€‚þ¤—QØ–‚@ˆô@­ÿ+Nc5VRc(¦[°‚b‚‡[ø…[¦[0„[ðb?0:P…!q“ S3nß5.dC&}-6(Àc9¾…:®cYðYxY0?…Q?èO™ÍÙ4äAä(>dTNå¡Ô ˜ ¸ìOY ¦LÎdbòbb‚N–…>æ•Q’Æ#‰“(ˆ‚ÀOS&dtTedâe%*3f î…º„fzñä>vý­KãõSÆfnT2sLfp¾a†bt9 ª8‰·x‹Ñ’”¡ýlg78Þš1Ó! uö¿  ©øæpîgêE⤊RnO„P„æ| æ…P^ÓQgª¤î‘çÿ×4è*ágñðgŒ>bq!ªce˜8ãéè-)è…ö’ˆhlöe ¦ÇŽž ‹ö *Îh™fÔ>ä’S®idöe_å8‰u¦åàf„ÎgB­iœi¤NZqƒ‰ðè^ôC£.ª*éhöÅ-оjÆ`¥ –ê—6á¤þjÖ‚ ¯hê– ±NQ´Žj8[ÇÛæã€hvfÏ»`¥›€k+¾ëKeåoûh™ ³Î[¬ûŠeRÑrfi:} V:é¸n첎;¢Šéj¤Ðk¼Æá³¦lïÈl k™èhrÖì¦èëþƒæFƸSa±¹j8ˆVÞtjÑV­Ë¶acp   ÀmÿÜ~‹³d–b ;ë².æ3mÁöà¢$íæàéÄÆgÿHg`(¸®î·¶£¸6²:eåæºÚŽ`<6„/–H®cñïN®KM¸2vŒA.k¿6Zr† ÀÖC1¼:÷ݪvŒ«NìµaŒtÖØåq$3*Û²µî Á¢íA`öfë‰éïöL}ÈdC0+c:–cxxs oUÀdNîÏ0vƒN¸4ȗߦSø–êú~j›v³º¶Òf¥t¾{.€w©ñŸ¸>pzþÓ¹€ëU»YðÏÂÞxò‚èè¨îî Žðùlå #,7KŽeñ6bR>Îå]þd‰äÿOHhÇXùvñ«SkÒvàºFV«ð'ªßDrz¹£{n<ò ! 3jìt ž¡AE"NûšŒ¡L96DçzŽî…ån;ƒrdº°; fOßeUè‘1wƒ^æw‰…ho&ï`Üu󜮒g_ü¼ç¿pØÐ¹u#×·zeÖ†á9B?ž¹h†¡‚¯‹™t$‘€JE‰Ø/Œáˆ!_pé.Š>ãàì)Æô%ýlÿ~ wæÓ^®‹R÷U”†Òr·gÓAç¢fX¯Áiw„ f9¡YŸÅsy„ï¢VŠ–ž~ɸ–ôñÄ,AæA˜j€9‰xôÿfØ…¹¯egK ½ÊÁJz¹vIßó†V–;(ocÞap'“° ç«`oÿ@g“~y?éIrçW‘y~iðUÇoÁ&ª¦SütùÅnç Ÿ‹Ã0^æy-zçèçn<ˆ’»P/™ÐãÑ9†‡9 ðŒÝd,*£”ýš *ÓzF¹»nŸÍ©·î¹ùÚtˆ?(Ú’›“¥èâvo?’ÿ¤ vpÇhé—‰3nf†¦îë¦÷åö´t0 üVæo·’Bváx¯)Сƒf N¯¬ @(ß®rg¨3ÿ¬¹r™ÁÊæj…=eé‰û£HyquÝ]“ºøÿ§í­‹GhŠþ@{oOú úºàxRº1£¦?i ÙåÐgyÍež³@ç‚wþg‘˜‰”žÓx©š5Ôg•Sww{å˜÷ûbVnË–[:—é¹ ÷̰Púgs©Æýáïé"Ñý|8zØc„;@!tCj)‡!•fUE7€&6ƒ¤c37×€¬Ò˜ñ¡@!VXéò%̘2g¾<`•k&|h‡â'Фè¬ÚQ²ÕÄVñìø”†aB¨MwìüDµ €5â ÌyÓ+N›a]¶¤Ó˜Ù´jײe«OXÛ¸rg–Ý¡’ Ê±,Éò]iÓ¯K±|<ÿ¤ë]¯ãðÜ$)ˆwØI“Í(kFVgÔ ÆU™)‹r-͵!¯í¸V:"©*·,;7í_¹ &L0! €*Ò´9óqŒ#ÃnúT¡Õ¥gEØõðXœ„ï½=­÷ðâÃÃßfî¼_qâäÀ6ݾºÓÏà0Aü<XµhG2)XtYH¹–MF«(’G#5“ÙG¯„z…Ý|çÁ×–m‚qõlDe„EVY%S$šf× WÒH¤T4Q€QQeVa•ßW„Ù—Û†æÅôEùx$™–mí}µXëI äx¶µd~Ší¸c;1ÿ•PŠi€8™EY„Tev¤E¢›%ĘJ:ªÇ›|j †?µâÇ!² sK<¿Ï-ûÜ2h<ªà" 8~ˆ¶J'ËhÒL˜²všf,Nô_PÑmuÝWbèã`=ÒwÞ‘2-Ù*¬q•g‘ç9‰”‰„Ó®óé•ax»•ŠXWYwW;1Ö“s– ´ÏG*NwÙ… #—YíØÕò ^1FгÌ/ùÜrO»À›Ï/ð<‚h<†Ä#Ë£èŒ2‹*׌BJ'˜LZGo6åC9Ëcµª†û+•çUld­±jœ–0¯Ô1±8ý %{…}E€É¬2ÿYß}Ãþ6BÊ6–ЉÏõ×,ei˜§™:Cç­wEV/%ªÂžW®M)&¨Ê ðz/¡„ê{K¿üé,€ŠXÒr:§±,ŽßN7ªV\­žzI§ ¬°ãõö¸se¼1Þ¯tж‰ †òľ ¾°ãvø•µÀͼ8piœsd¦¦³>?{¹P™cJQ&–XÑfS›ªÇ€Eœœ¡Ñ°ºè¨(8ª©,~tÝõ¤D9$‘Êv•,Ú#Ž#d¹Îú\C˜'ÿìÆe% 7g«øNºè(t €Í™ÖÜS,¡µ-|ó±‰N¦ÒœËDw¢„CDÄ¿¯‘„­Ø]d¬Ò°²ñÉx—ƒH´Ü÷â¡ð!ŒQ`[v4ÅɈ$ù‰(C·ñÜ {FÒž•ÄEðÄMpx*™ÜÖœþ\D8Â,L²É@Å}N1S [˜)þd … C IZ“.? CèÐWg¬0ÀH°$m‚Rx,ÑÅðTˆ[SÓ÷á¬}{œŸD8·0æì®9N9Ñ""É<ƒ#;8$»h‘/‚D’>óuªÂŸ8íoB2úŽ"ö«ñ\χáч\hÅ2T¡ CγÎÎÿì°?¬ˆ(Ð ¶YE&îì jdD(ùH74C5ºÆÿ : C™ÿ“• µÎŒ¢DQ@DŠ2Eãe²[2ûIÿˆB!=Bç*Zq˜VÚPuî¤S©ŠB¹ݭnhdÙELásŸ‘Œ0'‰3Ìí¬gpB‰upR.‹å©H¥4e[´§–ÙŽyYR[Ì„WÐ[> nøJÔÓ+çUçDä”QŒJ³šG~ä#th† Àe®Q€ÐT»¦™Bqœ™` ŸÓ>Bö–4Dg±º“L%h81•Ëdø­d-D!¦HÐ× ÉH}öóò¦%™£Å1Å’F)Œ^ç2ÿJˆ‰­r‘¨Lg‚„l’ úzÖKë(OCò I᪉Œ¤2•lÆ‚0ˆ)µnà!ªyœ6ª"œûóñʉ9˧Si@ÓûjÄå¡*°XÙ 'â)ÁFnL„„/ÍÌŒÓ`'aê´l²Ðñ¹Õ,ííK´WD¶ÁÌ&¬ÏþñÑòÌ:j–w(Ú¼êU¶©ÈE6“®Íˆ„»ª«!E~BÈY7r;+¬JÁ’Ë(¬DWqêhµãÀÏý® ’ÓëY›Øœ)gB«£‹@òÒdª.ê”'-¤’êÅ*ˆîq‰1zØCàÂD{t=mSùÓ”ëuLùI3Œa‘ÿáÒ'^a0¬ÒS6¼Ê! Ž"\e"Ì!ï»hX€æ¬’ø$&KÁ„C<Ö» aS¼…<;Ê÷©0S$üð‹E‹ô$@¸ŒkFrà;5ð–5• ëòI%»­Ûm䪥ĨMDâ•”ö2a »Äv¡ƒ*dGY@Ê‚(‰rÀ8â:H$vÃ?Hâ³6´Hæ­à#X¡'9$ÚÌ‘ÍzEÉDî°úÉ=‡y ¸Æ3ËDGØÅÿýÙ§ òȣåÉó³û¥2§%ãËM—‰‹NóAj7Dލ bM22’ (§[ŒšÍØ5•iŒÿ0 $%;­Zåÿ?•)J(éLcÄ $¹’Ë| <å¥@ábq#QøACêÎr€Ðµ4Œéa…8Eu­sÜb IN?Ek0#M…<žI4IRLQ¶ÏqT “×iJ8>–3¡4!•œÑ)Sg0Þ¤(ÚΘeèÃ?¤$¡Î@@…Dž=}ž9u…VˆÒhåœ%ÞF%äÅPè Ž\˜òØG™‰>ø„åc™8„ÎÐcUfĉ—V „¬ñ"áU!¨ùXÎÄ®E>íXõªF`F1NHp<ÄèÍš`ÍútDPܲ¹ßGÄ”iß7ªÿQO*8ŒÂ7âÐPhçTSJÆGЉl1Öc™àGÁ¥c†ÖòÎVÎ\ô# ƒtõÆWôÊ……Î9Ö@2"¥›ÌHSÊ$Êšs–SGÕæ‘•Âí æÃí°qÕ§eç5~ÑýqÑÎô×Cl W4Y|IUs¡GXEI¼Ÿk€š–•†h\‘ùÏ5HÀì@QÀ\œüƒ=üd°ç”M8‘\ÃQ¡CÒå !ª” +éàª@Ú£9˜nZÝ’‘`ŒÌ…½L7!’ˆ–Ó`*Jb±ÛšQ qBâɱÅ& éJNÒÃ]çvò“E‹õ !”¦%§)(9ÿЄ¢e}-¤C@e:Re¬Itc-žfüƒ>üÔˆØÐᘎqRͪ‰©1F„¨ˆ‡R¨{|O±‡ñQXo.O– ç95ç1#SmSFÁWoCàVFÕhÈåå´å5 ^©æÌíÌý4ªçÉ–d²Ðlž |%iꙌâUåi6Ç*D˜3Ú3FD'‘# ªnçl­†i”†‹äÐBžºu„oÚGòUTÉ´éM¼)peLš~¨sIÐŒÈÈz—ÔŽ‚ÎQê !ÏYË›1Oi Í.Ú¶ªXÝXYeÓÂgÑa±Ôa)›6Ö[ž.UðèH–З@ÿãIÄ!ÖÁPc„…ëÊ©Òeuþš§ŒwNÅ!Ó7nMQ‚4%Ó¤ÜÇ!ÔÙÐß…Mb´IkWº°:~HÇîÀ(L©*˜à, 7‘˜9¹ˆ8™!•ÍYÚÃ¥ŠM”y¾Z^f¥«e|†”"˜f”fŽš–yY²¹Ø (¯±¦=® ¬Ð-B¢Ô^Kÿ¡K ¢šìŒq呈8‰W¥j•}š>iYgT\2EÓ5@M‚%³¶‘ã…]:‡.mXZ@ ÚÍDÕÑÙ´¤B*£-TƒÁQÃÖ¨QÚ’QÂPú‘ˆ»ÉùŽ U jL.ÿãð¨P["*¦`þÀŸIbWÑ:„hŠQÁUUˆ¤nçaNý´¥”å•GˆÿƒÇ™gu’ÙvŠdànŽB\n^ÏÈç0!§8ÑN=‘ÿNAÛP¶u# )ÍÕ !mm2ÝŽü„ôUßKô-…M+]]K›T-ýÄeÂÔi2É”2œÅ%b‘¦8IK@­Å!k(×È©ªäHEäPŽFÜà•Ð p My*¾Í0  ÌY„ûŒ1ܧÄÛ"þÃ?È‚þB,2¡,œàE¤ú…¦ÓC+ºÎ,6‡Í- ç é'\ ñÁ±ˆÃT×Åeá—GþÝjuÿ*—ÒœLnš*],dÌ+1 lZ¡!–È)ÛfÔo}eåÔ(BãÇ ýѲRLªˆõ!tj”)¥¶»–ÔCEéA+ÌMÍÔÌ}0Sº¨Â?¨»Ô^»T ¢À]<üñíà#Çî1è+šŸ\m$¼ŽJ;¾O·¹Á {«Õ*ÚÖ¡0ú]f­¡Óî@rl­FÉÅŒK_lÆVT¡Ží¶—'!qgå2×ÂXŽ)Ý®Ö nÎ4e/’IÇ 35ÒíŠ 'fáF#áßÂy+g,ƒ`©¦l&£Š?ÂÑí .‘+êŽ*$‡™3B‘¥è½¨‹6óNÈÿ(Þ²bí/'Wg4ª<­2ŸÆÙ¯Å+w¥ùBšMŒ¢Ï+FˆªêcÓg$åÇ­ñˆ àß O ­%´T`ÆOºjŽÝ¡Äæ¢B Á£ ”´Æè¾*õBÈ*èÃ3Dˆ|fÆÿüR½Ò9dPM*ЄÌt¨7)D2KKÙ@bÏäÏc}F6ÐaPlÞ=cRPëôAîm[ü³Ó¿ ÎŽÙPX-=÷\PÕmйdö‚-F“hOOÇêð‹*Ø ½®Lsýƒ$©µ§Ô§~Æ4ÊlMm\žî%”å¬nWÎÉ£·É¦ôp[UÑŒ·àãòx6÷4ÍÚueoQ$Q’ü¬uþšMΉN7zºø¼DÅŽ›‘ Ey ’1Ã[؃¯Æ…šùÆVd‹!\ƒ¡@ˆ°F{=Å2G±¸n¶U’m°à.ˆw%°ªkˆh¦,âjÀ5lMÛ¢CQîÔÿtx ÂD\[0ßi0âA‚Ð\ŠJ3K¢”ئ“ Ý;öIŸÄ ¨-Þ«%aJ0íNH€×eËÜ*_²y_ÿjgë÷ìãYÄŠ{Çw­Ô÷.°EœÊA˜ 3BVã.BU‘£ç&VÇW‡u0Qñ§X¢îL1SÂ.ìá”Pq¦Oé®D€íwj×4ÓClÊð¨‹Ûæßðs+³ pøhÄþmeëŒã| gDîØÎ`‡ÝU)SS¥–7i%6Ë9?ÃD}‰0”º>ì‚1C«:‡Tè­jÉÐ*$|Eë«®ùŒ§6‚ƒj\'ƒÂ?(Gg¤Ë}~/NA“ÄlKn Õ2K+c1,¥ã®· )ËÌln¼¸|DЮј»Zªêx'„HÁùÿ¼".B (U$WÿÖ–¤i”üà׿Ñ&‹[ªm^Ôš OÂñ‰­QW¾ hÓDU+„^¦Kð¬8ÒT·§A»É1û×?l툔Ä?xípàîI@_N„WášÜâÏî\æÈ=QŠÒ¦Ç؇۸‡µè±- )5Æå[æÎí@ŠƃíʶÂù8ÄŠ16íê>sKÄ:³:DXGÎöNißüT‹úD­RXb^rP3gNC ê1™Té%Ìcc0‘ÆUš0ôϹbWQô]D ž0YÅØ¢”¨‘ES¤t „Œ<ÄŽz NÙ5&iØpž²D£Ï­ÔhDïÙÞC+ލ0ŸP­Õÿm/F÷Bȱ‚Oi‡ñÕ¹)pÁ…hÏE”{…J”±³&PKEÔÆ1‹ÎjEÖiXæ‚§ˆÓQÞhúüškgj¸ˆ:<®LÝ”†¯^ß¹Û{õ°7Ò[F6èÑzW°Sð ¹%K”›…§)^üòæä–‰ùœx·]¹qHDç'Þ-tÆš ¥CÊÊ• Æî怘͔ûcUHª?òsê(ü«TUq8æ´*ˆ š "i–´Ä‚¤Uh¢î­Šä M7Ó(M.¼à’«¢Äëë0¾.JLÃèFñ¯Ç*{h3ºf3×ÓÉÿfT„A7ÙìŠD#­6Ôb ’È"<}XË øú£âlJ8*« &š^bŽ!öºÔŒ!‚8Óˆ¯ ͼ«®6œË蘅ß"‘/ê|‹ 0u4°>±ÂûH%Ý(ÀÊNji0ƒ´bI F%ûlÎ Mc’É3%ÍMëêC=tKÑ,Sr‘Á°ü£ã#TAˆkjb§k ØÉÆk€§U@Ib©­ŠJcIþ –ØbE-:¹äzK°Ü€I½µ*àÅ“`¥‰=œlÜöF•ØòÈ +¼ÔS¸†ýÝ;ѯßv8¯ ÎR"eA’Zi& „Ó7Tàþ*¬1ÿ·@LŒS ;½ØI-¬+: ÎtCÅÈ„ã¤hS²ã'X'W[¯¡Cœ:ƒ¨³léhfÖŒ]µÕ?o}ô€„‹UòØšm&’I¹{ë7БåYÀ‘ÅUÀU·}uå>Æ'YIú‰˜ÄmaLy3¥ÕN)è-tcÉ^ߣWPŠ*.Q€§LÔõ:Ø4¹Âµú5K;Õ°`:?ímìò6˳A‹RIÆóì2Ú™Fm¯WѾù4š1ßsÍÇåK0±nÉ®èUªñ&VW†•U†µ€ª•PøµJ!æ´­~ÊKQ%sLà)ÍS/ž^¤ÉxÎÆChîÿ¯ËøCƒï.‘vœþ<:NG$³·(›Œß¿Y2y±üë­uë^_}I÷æ|5{àŸÿfÕ­kçÀú,¦-¥](K°»Û…Šå·ÐT$w¾ËVNp2m‰\à!H6îuN{Ñ ÞÜÇ7¬ííBÊêTàºG¸¿4/QŽºŒBXÈ;œN^îçA™ÑÏ4Âðy8?ÛUˆ`‚óQoX,ÛU$O/4…°d¢ :Ñ9™)4‘­ÕDŠ× ¿NÈíAŒzZ»Úå@HCMqp€¡›o€c%¶4Äb.iÈÿ#;’$†ÏƒNõzÈcì°äÞ(ÅGú1ÀGcPÿW`ô'>ð%;ë¾ó‘;V2>­pÃsÖIê$æ“CåÃ:x¦ÏáN#Ì¡zÆ–C±ñQnx\ çHI©¼I¸ðÃ,dÁ”Ñ1œ*bõa¿A3ÆD¦k²·¿Q½‡$2ÒÇL^è%,’¢j©ã*üÀÍCôr—F{Ó}v©/ ÄkUÚWÜX8º¡q”‹N3=¤‘CÅ!8Jsx¦‘4„–ñÅ›  ŠŽâ²ˆ‡,nq‹¡Ý$‰é` ‹¹L‹^ǼPEþB ‹ñh3&!…>,ã’I>ÄŽö/=‚‹ŽøF '8ögA®ˆKÿt§ó0J/fP1åòÍy ÿ'tN¶šMØ™‡4 L‘EGªPC0ÀED @±¶ˆ‡¼èXɺLÛi !þ£ÌKćS’*GŽ(AÕLeÁp¨‚—S›#cššV㈠‚Ò©¿ ò—6§]‰Udžš#A±å‚éjB,sÇ]:Ÿ@hZ"bN%&¬ò+ëhI{L&9F,i–ë ÃkmXì9ÝÐ3ŒeF<"O˜Ç?‘©'8-Áí•γ¥¿rÉ+­lÏp#DŠkŒ›âKbGÝ(‰Po8Tfi¹ÛÝÖdÔˆ¦I Ä‚”ïüæI@‘0NÄ)ap²ëô'Ù²²ƒ4N‰1êd,ù(Ðÿå‡xËÔr¢ÐÐH…\Í0m¦!yÂÒvkVN`Pã<ãb Ý w`›þÞ{¢»± z…³mWÞè}’«ÑfØ#/oÄG–p’¼cÿ™¦Œ.t£3¬ KžíE²§Ô¨(8ºn3Æz¨…'Z1³J †Ó–ª½´:ò˜É,ávÊÈ£™üjµHm,kUÇŠ²8;Ê±êØœ•Z*”äØs™ ]è`õ؇5,2Ä@,Ĺ‹@ Ë3ÁQ€§µÊʹWÏdÄ*=§DF‹„uhAVÔЩVµ±À[aE×%Í&V™ºø——´ÿ9ÊéV€ÈÄÑÅ’ïÖFÈœ*æA¢zÕÉVöhÏÌa¹ Ü[ŠvK&øŸ-œÌ+/h0g_MÁÉí²É]î‹f—žA=´›¬NEFL%í_-Å’†ø D§Ï+i1nsÿà›kukó,6îOºób‰ZŽì!» §J»éz½äY"Ôñ1<ð€äÇ¢ðiN—>ýǤÚ)„a%9\<ª˜«,T¡Ù©¢#³eÙ%$Òóºd÷؈ùЉnÑ’"³v|¡yŒ±Æ[µªØ¥!¡ tÜ¡Ùù…4«K„ÓÔóspÑÉ^öc)˜Mþ„1€CÉøÌ"ªÿ*. ÐP;Fˆ¬ ôù Úìü1Gî ÁùƒŒsõÀo¹°ßáøÁ_óÈô7‘`¿o‡˜…ÏüèIÏñ"‰ž‡È.ýêY_V¡£õ5ëwëi_{ï¶ÚãDš½íyß{Sxó¯Q½ï‰_üÛ/£c7þò™d{ľùÑ—þô©_}ë›Ý¹¿þö¹/òД&4ÃêþøÉ,}”º4°ƒËßþñ£"ñ€úg§~*@Wsÿþ·¯¯7Fl ä"fçþ øFûøOWïºÉ’ì`$Û@¡¨C€ ` àï/ÿ6nCpôþ!— ,ÿfá~†?Vð;6I¾dëg' ‘ÔÏØDÉŽqá4k~a¡²ch~æ®îꚈ+Dákø`2p-f‡ýr —ms.~áê²!¬®#ŒFèÅUbÒ`Jæàk.Pýf°«ËM¤Â !;îP¡¼ªÀ¡,ŒfÀA?F!žáŸ€+Òpæ 5(`þFúâùb0Æ>ÀatjtÊ‚ª~†Å~¢qB ¸B¶¦D¶ŠÀ.îOý@ÿb±gñöH Ï®>1 AчPhü]%V‹“°dKY‘ ï/ýÿhQ/ÊJ1†`"$ðêEѱƒ"é ZðÜ ·bNa á"Õ/h HÄoï‘s†üDcvf'ŒC_"¯¡ ÒEqÄ¡>&F¡³¡LÁ ¢! ”ðÒ€aaaàþª ¿`=Òj@O²HìHBcvIÄfV‚'TkWF?~b2>†±Èq4)V" ^Àˆ’%^að8Òþ"1óQR*D%MCýBãþ¤€$_2v@Ò (%2è@“R#°xè@"ò!;¡·a$rÜ€(·a(w€(‘R#ÿ9’° FR$ p*s5ª’äDCý‰ v`v!)×q0r+Œc<$Ò<ôE&dr×R(·! íR.ÿŠ(•r¢fåѬFÂŽ0ï‘IÔ¯4îov6pva#w 0rR¡"w@Ô18ÏðÏ"/ò8Ý`:A“–³Ò`9‡"‡q.õr# B²ÿ 70GÃ0_3I ‘´RMÓ1•r=€©C §D ¹â"—È(‡Ò8 3 Ùd~r(Ç)IÓ4½  Týb@9À4òO6Ä3'QaJ$I$µò vàþ$a)±.°à»2D½rÿ4R/ñ3/¡Ó žS²Ztɬ“#maC5tÿÿÒ/DÀ*tÿð0‘Ì“$g'LsIg§4S=£T)‘ò(ß/²!Ë’9•“_¼ôIÀ@Å4‘`€5T…to(6­†;à/ïÏ HÒHRC3”$³óþ‘#q“#M´Dñs.[œS9ñîr/ 6ôNïïN°N)u$UÀj€t4Ô/<Ù”÷:5Á&4tg‡@Mµ@SUýÆôT 4Ù¦ÔJ©?ò¯³JaU)›Æ }õ@ËÔjHÀ4Zó4@ÕSGÐz ëÌ2Àjÿ@rvêT+ÏCà ñZ0[ RåÔNñtO7ÔrSPË/wÀz)ÇÕ1%á:ït/[çu5ë4ÿ0u4Ð4ˆ4Y‡Y]#Ü~E4JC+CC sZuL4X¶W5U•Ô4_uCeÕb¿ô1k_jA–v€óaÕX€aI6Ñt4ŒUGƒ_û5ðÎL`mÐ4£‘@òv€Z§u´`5¯õgGr[‡`±NïO^%õ[9òQ™ö:Çõ€À€àÜ :a9ÝÁªÜ v gµu^¡ðZóL_Gr_]–÷Ö¹¬fvB‘*B++‚#Q5Xÿ AóÏLMÖaGpM“˜4V`IódvÀP9V“ÈÁ-Ý€—WÖW¡pdûe€XGƒAQã_Ù¶Ðh&ÜŠܬFfãÖ4kÖ4¯uvqvÂÖZÇvv!ñZm×ggWlůõþzViKÓr³ðzaFwÀF!k™·ìÁyÿÈa¡Z¯µw…Z3LCLCÔ6Ová1w2ÙaE!×-Ó r‡‘Ò èa<wv2W7WeU¶5B—|¹ë€ø1e³ÿ󵆮Ò4CcBZU.`wvïïZÉV{q—{·º·†4†g fw1¡Z8q¸v`††8ÖÜ€‰5a9íáš×qõaªöÒ`ˆOSwk÷†M£{Gã{G#|=—e;xLJþäñóo5KKãs©ÔIuö"´ò"h“$Û0~å‘~OÀj\À4¹4Ð44ú6p+ø1x*7O ù‘…r„R‚5ir!R‚5™9Ó@‚Yâc+XXõw4:׆o05Ðx´þÁÿ/*°C1$»0å10½…å± @v—/‚/‚ ‡%‰V†q7ÿº7™cñvÿgW†ïoX~w†xŠ8vÀš× ˆ‘á?›˜c­Ø.Á9 þk5œ—ó®Ø ’a 2HòŶ†G#ŒàlÅØ4459X•óÑ@$f!¯"&¦„:qG’@ÉWi5Ï4v@`¢ïï"82¡ 0Qâq~­fs Д¡åÑV)Y’cƒ%„á¯(A&…A&/29‚%wK?9 ˜%8¥!´”‹•¨ÍÌø¹Ÿ‹ezбá~ñúã'¼âc9qóþþ²‡¥•[%zvggXfç „YXd™3x@vwøZ‡¿wŸ¹¬¡yšwàÿz q¯Ùšñ3î²kkaœgtœ§wœ¡¸Îù°±ȹjÛ þa ØQw8rXÄÖ­m¸žëùž mõÕj:©ƒÄ±µC¡„œ‘$ð@Q‘DedýwÆd».J•$é‚ïvCÓÓó¶~óW¸OÚ‘UÚJ+·¥óÓ¥%R¦%ò“o“ݲ6yºgrr£“˜ø’CV¸ñ—‡:e‹Úƒ’$´j 7‘ Mû:bÊ1Í<„3w€ _²x¿ˆ9²gµ2šg­I2­‰Y­I’h³W†ƒvug1Y) °ÿŠXwœ.›j›8öì`.ÓùÃÿ™÷±™×œ£×ÄÑ™yG!ËÑÁíº(ÛÀi÷ZkØlÑÖ4<Û¼Ï;HìðíP;Fç BÑIßN&Åæ%%öûWUÉô·¹¸)§Ê‹Ö)!ö“–;‚cÚËÁ¢¹'ÙÒ ¹kº“©;“§[²¡¦!8͸!ÙÁ!é€TA“rø9»›‚½Û‚óOK£ŒO¹¼[Öeí 9ñê¶ð©‰P‹0I⑜€sq‘•6{w·‹‰š<Æ=Ýwg×1+Ü®g”@ü°GJ¼±3Ü‘b½±E<÷ÖÇ9zÝrÕñüì|ÕUü€ÅAHŽ]ÿÈáØmý.'{®?]{óï{KÃY¿³¬u\4 OÂhP;¦@ ïŠÈeJµÝàç; /Z–u{ýVÞã1Ê9šU7úÉÃW'|ExÎë¼á¼Ë™›2aÚ¹÷¦Xº3YÞϸEë<âeAdAnAT¡ÎÕÎU!â’)ÀxuI1÷Ê¡ÒjžËƒ@›0+â€Äò®à¤U!ªG¾ÿp(:!ÉQ-Ñ=?/Ò"{ÀCe9;P$ƒV†e˜ÔE=Ô7Æ¡þÔÛyœÝ€TðÏŽ4À"'´RQÅ=µL9Ý)äÈ´ oÿX•“,ì`¥Š:<¡µZg‰3kMkå$ P@Ðâè¢f3ëV†”wÉ~}á#GF’‘Î> m´ÆL&]g›mÿƘŽöÝh§ìÊ¢€+®–lî)Z´ßš·¹û›¹ùDÜ+àÀ†é[ݾþnÀv¢%‡W-Á¬Ú‰¾±Ã扷բvýÆo¾/çô™²ƒ~·õÇŽ(2;þ""°ªsáƒ^㇇àt貇éõê±ÓZ:¿x²ƒ*˪Ÿ "í˜_…mväÑ> uÔCÖY>" ’“ß9i’A&¥’`§»Ã·Y~ KKÛlJUº•œ>KtzgžUÄ&€b‚)Jý#D¢ï½ä+P¬‰èJ D’ÞIäAŸxþyàE-ž£þcÇçP½ÿdê(äÔdˆY6»:«Úô:Ï4u8½A%úßKiÙDŽZ5þc7w^„ì’œ0@bR/Ï|óŠuf­Ÿ-t±¥ø"0¾&ÅQÒ½$^½*¾é†…n÷&\½ÊY Z$<ê{‘¾ 1‡/% \$Á1l¢>—ø"6±ƒ8µ¸ü¦éÀàx ”Žs ã¯À0g~÷Ûo²Nˆ?£D]ÅAÏÙ5Zv³×˜lawÉÙ~ö¢õxN@(…)Œ°‹Nà%8ºŽ.²´Å(ÏyD,beĘÂTíjsG†¨: €j„¤PˆÇaÑ;tKNÚää:´­|þiÿÓP q”Øâ ¡Þ%þÆEÀ-bÉ8Š’á“§¼B&‹ãc§žød%Á# D$"ä Šdä"ùÈŠTN"zãˆß¾ƒÇWðEŒ.aT _Ò;›På'#Lvƒ+¶$å5/ñ ¢€R—äñ•¤„ËàâR‘‹8„xÉ:^³ŒÌ`Vf3ñ ¶.†ÐḢaH3/†=.â‹ ¼Ö¦äP3<°ÜW¿ r ªÑ‹Ô M¤ŒD ò‚r5ª4A _îë—tX (Ÿ‡á'\p¼è ‚€Ñâsñ§5ü ÈD8²Ùm.Ü™yX°ž!l,âÄÿè²Ñ]¬™?ìއÄ_ SHÍRÞ?£•:‰‹Ab`’ä#«mæN~¹C$‘¼ý%#Nl#G‚[p±nÊP¾X/¤ Áë%±ƒ9"#Ex” âž":U¤“Re'pò©¥ÔCd#;³ÈÃÄõ­t]$\)‘Éíí’tŒ‹,ËSKž|ÒS=åè‹¡ÈòPE™ª¡VÂF”@Ž‹$áŸ$rR‡lÆj¹©ÓV ¤fÙã0ÿígHÓç)†˜>ÚŒ1wL‹&͉ 3}ؾêy!ÓTøÂÃÍyî ÿQÑc@!€|Qs$1Y~Avfgå—u‰tr~ýP8bdt² ²·ðûð Ш¼‘ »±8SÑ @×;;rŸÓ ‚ŽYlg~SrWä7 9u&~”uw…uÂã#*p<_‡<€ö|ÎBfÇ`ªUñFo³km§óL³%i¸Æ@cÈy´—6?Xh?£±†30íaQTF ÓPÒiøbÂ@å”à1n(;`?FÓwÌ|x7|Å#îc4š¤Ù è‚·#H ûp û𙘠hzò!tp 'óÛ  gÕAFÿ2!@øCöñ{µ˜ˆ|GRukà¹Æ]½F^‡1nÒ¡|÷]Bô„Ï…†AJ¸Dõ–SÏbYû&% A áoçwR‹4D'XP~ñƒp†)€ƒIÉ‘ Såeåaô‚1£¢šþÇ8p@É<É€)Épö@@fÂß!YO÷#¢7Xfuqf p âp‰ûpñ°‰ðÄðÀ‰#I‚•8Š3s ¦HC©è)G¦C<“9>8g3@GX¦7XH„C¹H'u'›áŒ—sÉ“ŒEB!'E'ULŠF~ÑÿÜÑ=ÝÁ_x[vyÇó‹›§k…¡/gh@|70‡è†÷1NûAN¶'‡âNô/ô@´˜ˆ=Ô†{Ø—k)y¸¸ˆƒ^†A?Ÿvtñ ‰ x Œ™‰$x è²~ ’£pЧÈl¡Š©x{y˜`i8`¨™w„Y[ƒ†ÒyaÙ fŒ/Ç|¤Õ”CB…Á'…,F‰…Û·EÝÁ Ý“[Xbçw„‹”ræ—1‘2Ù~ÑSÕŽr ô¢y¤‹ãß™cõä°X7Ø=`)q#(Ñží×ñ6 (“B‘˹7oô™‘­‚ ™æPÿ’‘9‚ ³`™az]#¢‚j‚>ÛÐÑ ºÈÐã ™ƒP§Et¦œ$ñSwŸÊ©œ'ge*7”**ÇÓgÕwZ¹i$Ñv Ág¨ZØ 0\ MÓ… qÁ‹±™ké%?N÷á–|˜*—v©ý1—T—%b û!¥Bšæ{Nܳ†ã=·|yç'¥/~j¿ACa#ø qʘ–øè`àP‰°‚¤ ¾±‚Ùä%Ú¤Â%RãÄ_Cˆdzšs¦•·L±N;ÀCÛFy>2Œ²ÙyÁk¼&}Î'£5z4_`,€ CgÇéÿ7Éùâªzó“áw~~!@Ÿ¹J“Ñô’I½¢G@¡~šðbäG@ÁI¤£+‡¢ž?Rrz)jo¶ªT7«ÊÙ vDq¼1z£`§—h™’ { !¨·jò'- idßQ¡±UýöKM÷¬$QréGö ¢š5†¶ å÷œÑ¢Ñgæ„¡ÆY¸±m ñ”·åL€ÒìãvÔ†Âç#I:÷ÓBqINð‘¨}—ïiB‡ô°Š2{xWZ³Í%j+ym騳¤ËQ©š—?ÃCª&BC´23–93Lëlªp ­â§£‡ÿJ€j„Ú[…(R³v)‡¾ANÓ¥>Û³¾ç{k=›¢‚× »`CnàH–››TY›ª ö°ÛúÐv&ÁT4¢„Ûø¯gb–cY ±B±³¤(Àúüجçy;œR€IwX%”V¹3XÑÀ*§Ã;§„Gq…”«ƒ“ƒýjŸ@Å7¨j¡î nÀ ò…âlTµkñ Fç2*(_*hFj2UL¥F-apXÃúöwJŸãöʼ.±d|YqDY”%°d*¾ûF€gpª)êHdzu‡¡„‡Ñ°Ìè·Ûv>‘6¿†±±]ù±«¿˜V¿£q´@°ÿ /[‡‹ç?°ˆùÁPQêP3;‡þ ¿¡AòEj#C+b+£!< 6ˆ—#Rz´ ܨ}G²j9¸7mš`ƒI ¡¯á¨ˆJ+¸‚“ØW»c2«GÛô p üxsX{vY³ƒW æéQÊñÁÝT¨º·?½ñN*“+´X1ã¶´‰nz{ŒSª«Ð€,'6p ˆ[p&Š­g³ê§ILJEGºcEJ€e¹´fr|X€ô+jñ:¦³­bÿ`ªÓŸB+ÿ° †åU8È¡™s“®‹9—2ñø9¶&åð¶r¡»ÊÀ‘dpkÄ+v`ÿ"µ»&rrPpœÌ8g½A&Sa¬H7:ƒd·Ì‘{(œÃÈn;½0¯ÆlíƒH y ¥ %³Õ´¹%4‰Ô%Fµ·&*$Ä!³Š']‡9ã;á0=m¤xêÑÜ&â%»@R'e`˜ZRœªâ^%ŽâG}Iý„Ê•Ñl›O†Æ°½ª‚k¤À38…ãa­8¥“Õp@°B É–œ)‡R»œ‹ÚIW*¤BÿP ä+,ÓÕ‹< u]+ºƒ4¤;@qj&Ki’V‹¬*ga2ÒCñŽ0 WÅE’`ã8ÞEßa:Kqr&þAâ@ oSF8±É}äžc¬{<:¦ÍÇeµ¹H—Ù‹ÎJŽuEÜŽA‰rPvWwu-Ê¾Š‘Û1ڔƀD‰Ô Ĉÿ"öÿ•àñ[ã0Óv\ÿ£´ìˆHRªy˜Šê1‹' òj6ÅÍ{e1 òà2™!„eQ3ô•á õ3ì`A/â§+ÃÏ`2«ö"­ÁQB{¶ºÞÔ-KÇF2üÇ% ^F¡ixu¸öŒÒôài° ~Ï® ÷uß—zkQ|Ý%näv<&ŒýŒ@ðÿ©JíuŒ4•#TZ¢‚²ÿã¶3ÏǺ(¬$F‚ÇZ4ãˆû'™38’Kƒ>æäcö)¤{劜å.;¶ÈïJE!¹ª´S®£ô cá–ä¯E-–TúEj’Gœ-Ñn‚¬Ü€¬0Ùÿ 9fžf¶¹‡VWÿG¡RVï8‹e0‡é–Nöµ]„°°|¦&£×|<⦦á1½@+4ƒW]ã{T˜Â61zg¶Â€ßãÒë2$ãÜ^1Фè 3c3<¦ïx(á êÀAëŒ>,Bëê/E[¿ß¾[ÈfA±”&?´ù.þ/}Ï ®A k‹ÿx»¡NþsÒ¬øê‘ù¾íøâ÷bi|_Ô¾¦yŠñ‹¤î‹)ÎHƒ–Œ_|1¼Ä wýÞAGe“)‰(Z_¬¤Ã¾ü¡ÐٜȢ°Õi;žÖŸstìò«£+¸:9‘ÙOAóztÿõö?:¡ŠÜ¨¶Ñù7j››k^íø·ƒ€²PÀT\²ÀRHI&Ú’ÖŽ‡åÒ¼rÃÍÎÂrÝ”#µ­“»œ;?‘ëdOa§„:=JP!A:Û.Ëö4BUÙˆ®"ÄPÈÄŠ9J@°ÌŠ=;¶,Y± Ê‚åÈa#¹q”¡{ØŠdT4Xð`Â… 6lÌ,L(1 €E;ðìØµÃÔanL¹a7ªh:V Z šÎhvžwÔz ` b¨u˜…îÀ0¸½ÍÀ6²‰ $€°JÜtn•†žÖZÑaWz=Uâ¶ÿk§7*jj#쬧1ÏÚ3zêÈiÊÚ êQÏ:¥¾/ÞMølšøï_O˜46F¹äj› ²ð"¶E‚2å^â3F[4È¡Î÷Z¨øø£ƒžN¼ E:P¯þFÉn<ñ`¯DRFA;î6²v3‹„À4LÈ +A­Û€@¸ÛŠ{2¤âR H ~£Í,}ã²K/ Û€8hQv83•4NIÃ%˜ôq㢆*J“£ôI(ª¢"…4þé+®üª¬´]«,·Ä‚+KŽ4ÂDÂd^c˜þq£ NcÊ©¤ gNïò4"¡Ñ0•³¨9¢“ÎÿžTM(‚Rå”"¢4j(¥Š.úg€‹"õh$Ü‘hw^ƒš&wâŒi xÚF¡tÒÇZ\kUÅS;F½õŸjÈ©uO«ñô';þÙ #¯U -Ce´¬ºÀ ~A*VXJòèŸÛ‚_а/†˜0c„ØÍtã” ÓXˆµQLq±´ü¬ˆ¾lô MœEËÔ2k[ 0"ÄYfÞÌòÉâf›Œ¹Ë:3E:êŒï§J »N˜¶N>Ö4­øB|½§wÑCýÌñÄíFQGîX´*¼Ñ¦#Ðåä&K²·—»x—Õ@{Z¾ÿÏÈb´®Á–oÄQT¦ÇÂ[|1qðfÄOm ˜Ûñ@ã l€ˬ™…$ë6  ²¸‹ «ì²WdÉ`}^=¢1ƒl€0#Æb}(^…ŽküG•k¢ãZâÿ!%TX—ÚÓV¤V9è$(üu.°ìÅ>°ìÙÚ«¬Ï9ª#溤‘yíOj?%ªX]¨¨JOO(U: Z•(ƒpU*4sÙ©•7Ø! çË4+RJ-þ”†E,ð!ÿx DÖ À‚Ô¢ÝÊ–>f¢ žHë%n˜–Nœ%žèƒH9!®rB;y«y.$…žì@¿xUÄ#!½>—½´4j|ÿ)Vò 8ŒÆ;âЇ:j46b §‚)Šˆ&Ø a¹Ãâ—ã$Ȳ@Ç#âq‹kÜJFS!F6¶øøÏ »Ðшã–ÍanH;@n:W¹(ÍægÇid"a™ô™¢<3JãÄ£µèpè3µèˆv6÷ÌÇ=ð!w¨Ä•²ð¤,Äᇳ™­*ÛIÃÚD4ä¨h‘‰Ð¨Yâ­h»ðŒÔðÖÆ¼ÉR:ƒÛO'!»ÉÒEóñ-­ƒ48´ nš\4£t9²ÜLgLªM ð¢EE²ˆ‡ÁT1Æ1Š£;Ý!Å0§² XåÚn—Ez&"pÅÿ*Àù‹x€±;tàF¸.èžYyjùGñøôŠwÁ¡"ÕãÈ÷°$î!*_b‘h‹Õ‘E%iDdV“r|b~°‡,¶Q«U  VMYá¥Âü~vÊ MêÿÉ‚”ÿ!ÊZ‰!ƒ;j|0É‚™úS«j­£n# ú°‰=>h8íÀñjVñg æ4BxH2>X¤4eU ýXÒ«Ù#7äøæÂ½}]é8É®£pÚc¨ñøE>îŽ[ÈýTÇ*ÌiNpŒ"x×ð¢,H‘‡ÖÓ³…éAÅÜPÆfÜ^D ÉD–FDž’«y\àÿöÍF8¾¹­Z>gkÎ,8 ËÒè(cKu(>E;Ýf"§–¦xÝ‘*8‰T5š(:­1vµ®½‡dyK B£Žýn;¢$¥**[Jîï?lPÑèQ¡`fcµ|mÚ0i]£½2—ÓYÛyðû4Yçq®aPß×â!¾œAÐx$·ØøQšXÊ 6%t™S؆0Ø?nØ|±ˆÝ8qZt˜7x_<-ŒM+ ;Ì󳟭Hv x~ÈF Ò¡DcNu«ô؃º†ä ÿ½¢¼(íuO|sñˆ$€§ºd¥{Ú²…JvÀ²Á±ÿž”ã\ªpGKkåB…Д~ëSHTRS;¼§yABÏùóš\z2ˆúxÁ§.‚!Ö" rd7è#®W¥–>œzÕ¡è£)š€·¬Å—¤k Ä&õ@‡èŠ‚»Zà¢ç (® ¢yÀ Ñ‹XbÌ­Å»¤ûØÄÞ"‰}ı}âYy£D‡z…·â[€Ã¸0Ä,0rãW$vq' Œ‚:@pJ+\DK–m”p44†ü‘rnñæ°t›Ú·=¸Ž9OKÎdÿü18ý™ UbFñÑI|Ð¥2F…?@`[+5ƒŒ‰ãàÅdŒVfñî¤ÿ7émÆvª²n4vh¾ŸaÛ}×àýì7k4§Çňf´GgÀaóy€ÒðÌ í@œÑ ÝÚæLºE.6q‹¦…Ëo ’ËØÁ9bcóÓàÆNx<ñÅ2WE½†S/ÙÒþc;l›Ûž­ˆPÌ¡u§Øv‹8¥ÁtPàY×D¤2†Çˆ  –ë¹èz‡Væè% ˆØÍÒm¶!òÇãùH6<ö‘l`06Æê­Æð²M8E'8A×¶Ò êE0"\ÙÕ ­ +“2D T™*Rfª£ ŸCœC  /¦â™z™R>SãZi¨’õ‚£ž´M7-åÓo‚ÿ‰ â ß«&«!ÔÛÁá9jWÎ%‡~…ˆ>ÈA ¥™S\ÏLjù)FÓŽ“5/sšŠ¨x†vª‘ϰƒÐ1‡y;z:xÀâ(Ç€Œ‰€ 8Íxy·48:x#º ‹¦Š 'Ù·,™"jÃÑ?ÅR¶Ï»…}0eã§­k±h«,p𳊅èÁë„Ï1Ø«{úb0#0…‘Ã8èJ¤´ñb¶Á¸\J°V{¥¡ÓBùú¯™s9#0Yò^¢š`Z ¤Ô™›7$$¡0!ì›c9©#<ù‡É€¤&¥o*›02½ÌBC˜,²ÿI®`“ÍÀ;p7¹cÀĢЀŒÏù‚,ÙÄbÙ‹H ˜ˆII5Zë•Rô×¹+÷cE½âˆò1‰ÊC37¸¿1rAcû¼Ä2‡}ÐÅ1*Dª,Êš‘kxñh½:ã†K†×P5&£ˆTä &Û”µÊ½„b•ò*Ýë¾îS´oD•?a õ¹”¾³ÆMÉ)äŸGk+øÑŸlÔ“:CŒ¨«@!?ˆ€>›ÊŸ„z„øÄVü‡+‰”Àòñ.P%0¥sÉr³ªVØ»Z‰‰(Ù™°"·³ÄK ŒÚp Û2¹iä $|7—‘°7¬°<${˜º,™ æ‚ <ÿXU8¯‹ÎK¬¯#§ÃIPBÄs𠥉«Àõà&fÌÀ¦¤›”°!ÜbªÖš¥µÙ˜ŒK05”ލa0Ï800„¹1ô¹^*Cø(0)46ÂE¢…¡¤ËÀ£ƒžÃ¸«¡‡ýº›1Ø!À™t‹‰ ApƒÉ†¬ŠÉ¥l€§‡…¹šŒ!㸈⸲¨ÄŽŒ˜Šx@áHáð—"À„(˜¼;Å^yÛK¼U¬ˆ‚}ЫH© [X§(™îàºC8ÆŠC ³ ,›²› §8«bX"ø¨èf†R+^Q«²=ó› ?)„ø‰Ù#‡ªÿªªGc*Kù“郕W± T鯦º”âÒÇ쫤åÑèÊàóƒ¡R¢¡ [É~GÖQO›Ò½H3>‚0ð é!òçòŽl0‚-ÌE⛢±ªÍX S`ÎÈ ˜Žº’M¬ ‹âÈLÍ|˜¾¨áè‚Ê™·§{:—É ¸ÑxÃC{ŽŠXÊ®’™‘à1½ƒ±ÌFébÈ%¢ QJÔy?ŒÃ“Ê6‘!\ŽTB:é›_"œ¹ú &˜ÛB\Ú À g@š)´®ýØB¢AS˜óJ´œŽ´yš3ì÷9§O*yXHîP;NÐ5Å%U ›5“%ÃÇÿq™)K¹›øãšõø HT@U·‰ ³0*q *! ·0‹5Q/ÁÄÊI˜ÚÀ‹!ÒŒŒIYMÔ¼½SlM»z͹˜—Š-‡¡˜¿#:L`4Y(#,;ÃŒ ˆ,7@Î4€…VSÎT{Nú1ÏŠ4¦*5F“ ¦’Ç:Šâ# ˜ú‡K Pæ¡çQŠÝ£ƒö¤ ÷TˆŠHЗšÏQ1¡òÂúo‡¢2'[¥„y\Ÿš2)¢ø‡k ×ÚŠf™©’Iƒdõ¹ÐżÈÔ- Ùi?¹ùq Œ$ÕRå­ áh?¢0 › «€ÿ}Jy¦5‰AÚŒ?dÖ»qŠdœ™¬sºŽ¨ˆT MRår™äJƒAíÊ9©í/- 0‰Ã$ïES@…ª½i-s:6Ú:0ž;Ûµ1FürÓ2$°”Q9²EH<5¢ÂSYø¤Q’¥-e‡/¢@™·M›U‘ìÀøÐŽÍ8®RsZp›ŒØyÈpŒâX˜ c²ð ²ÈŽDÙ/‰»,IÕ~á¨tU®0¿ÔE]A©«X<`á¨^@«˜HØ›@F_m‘äÁ¢MVç"@ÞmŠDå㌠n¢69X}ø ý1¾#‹´x5Š$»£@ÏøÁ³lt©–J×ùq ÿÚslw´Fx}^‚¨†oú‡Gø¤}ý×| }5†ûɪ!«OƒéOW1 Mxcä‰(™b”¸"JƒBèÇ\‰ÉÐ2Ç º Ç l?½Y½ÐD,!ÑÏÝL<ŽâhÙ‘Á¹‰J•TÉ"|Yäår#‡ðŒYˆÏˆ†õ`ÌÏÔgÈ¥ Ñp. I%ÇâˆÃšqÓý²9^²/J®¹ïòúBܶœ¥aÓš•ÛÃ+ÌÚ©ÝDjü[»åSU  hÛ[2>'ž1EðŠÛªm¬å©0«¸¢MÊǕع>®¢‹`ŒË½\*1A&ùT ÿV‹“Õఇذ܌Р˜Ó}FÔ-¿òCÅZ›},eù •Q7×#Ç6Y“4à†4ŽYmh¦XsÛ 07 ‘ðjéYÖùË–^Õ ¡@Šš:¨wÜÇé-fè…+nžœ ˆO ž@qÍõ ¿Y[«šbžã¡3ƒò”s]H€}E¯¡•g3‘髸*j½ hwè½½…Ú$É!‰•H‰}à…`Ù‰àVĵññÝ,¡ÄE>Q¾vÉaBʌ͈h¹¤h ƒ¤ozЬÉcqìÙsL‰Hƒ‹ iF®‹‰’FÒHe™løˆË›ˆãR3ÿü¹©¤¸EKÙîÊ%  ÌìøŒHˆ0a¨#jɘÃýج¹í°¤Æ©Ê;•®¹½Ûà sbƒá©S­Y3Àù›Ãܤ0+3¤ªa–ØY—´ÑþàÊä¨âЈ.·>ŽËUd„ŒF–»ÚH˜+1–xÕWM]ë¼äòz}` ‡Cˆ6 ]ˆÓ)Zµ…Ð;圃½sĉ|X(µmÇXÆ8=3oŠ!MŠ×³V{8!=#Ðc~+u$fØ–u¤)¥Š+Z­AÝÝ&ŸZ5–`ˆàE×÷¼æà«@ø×’³•lÀê]…©p‡v2ÕîeÜ {(¹ñ"Ò#ÿš+wpÆ[Ó(Ò•dÙñÇàÄ ôU…äM¼’*Éè»~˜¤Ì†aåÀb)Â/\S¤¾%í(›HË% <°‡Hp嘈ÉHµÉXÊF„Úƒ¸¡%0!†i®u[8e̼,TMØj%ŽØ‡ì° ÜÑØ…kR§»Ù¨Cë¡Öo6D³TK62³™=îžüZšÀ•¸¼éšˆ#¨gx.•!Ú %W¢Q±Q [ëÙ‘’)W빎׉º¦o³¹{ä娑À€USµlíªÙ–G`úþíÚëøÎ‡ø(h×í(&ø‡¾Ö2"óæŒlÎ>i…Mž¦ÿ2Ð nÀŸèþåâ¹¾æ…f ×u”í‡\륊5Ü¿°U'uØm]¦’^JÇæ•Jˆ+Z½>tg±Šè¶ YYEÏ–æÑÐ!чr‰–?i5ñ“fXï~†Œô&Ýc‡¦’¸ ÜH-ßrcxÀ…f@rQšÛÂ9®¯_2™ò8R¦„L ÁÙÙÀÑØÐ¦qpBâ¦m‚aÎá¬ñAIGb«•é85&™. ÏJ à¿e ú‚Žç Ž)e:–<á…Y¥ãŒ14Ôª¥S=ù¥I6b¹®]³ïtégVL‚iYéAí`13¹í²)¦‰JåPpAŠ áÿbkPÑ*Òá`kLj°±-'Œ.?޽Žd¿ŹªÎQþ‡O8•ác?ØfYÁ ¿‹ {°s𞋊˜d1﨓H–Èæ†q„…ââdUw }`úQèõë.Æš ‰¡p½Öë ×ë_Šœ ƒ” ^ßOo_YßSX¥ÈôÃN‰-™ˆFo¼ª `ïÏÁ ½æÈèh§oûãhy“Ìvƒ¹Õ9?5Dé=;:ª‹¢+N™¿¾D§AÙ””OII`#ö Y°ÁRQUÔ”uµÃ0ÁºLYÇõ÷hkÑ×?²°3W˜Úõ¸s!„¡[’†øÏxÒyg{‰æ•>pD[-šÀši¥¹AH'îèç_ƒn¸óIzú½–|JûFJ4ÄÝÿ×\m½W›ÑýcÇrÍ‘÷]rä0W–ˆf†õˆÌu²µs'ž]Î'f 9쉇eÜ|÷,÷¹“fßý] €Ùmlnp[@÷_hñ‘ÃaäÿÌ’Ð[ºÅæzùáµ\º>‡®…ž^† ÛœW‹É£MUØ8TREét°í¶I§’;¸Ä’G¨j⦢e)=~€+W¸öz¹¥!è˜{ÍDé{Ѽ¿º+«ö"Ygë”îj;ëç¼ndSå¡XR«‘8îªÙh6mZˣѣ­AøÛ,ª@x* ¨Ê°ÖE@w}ÏM¤J ›t5­Vø¡Bè YAÞç‘è˜Bÿ¯€C+ps‘bÁE"!Å5H¨Ð˜Òú‹8ªt‘4TÊ~i‹A2=‰ ÓÓáAxh=7ÙêU”x’úH…?4!‹X‹HƒLc“¢ØÄ&:©]Rr»+ II¼â[LÃ…Ï ˜¥ñ&jÕÈ\Ç袎¸„ì!q)ׯÜb¬”½Ç:jÛNl@›µmté±GqÒàžÒ\h zâ";ì†4g¡Yr*&Ÿ3î¦A³ÑszP €®9dË#nÎSF2•š0£Ûî#ŽY€ãìAÇ-âŒx d",œ HH@„Ð É ôÔap8JMé¡N9¦£ž^šñÍBÿKÔИ].›hz Ó˜†¶Q‚ó,ÚRZ$-…Bœûr`§“¢$¥vVÄ"=¥b$.¡a)4Ÿüè°(,¥åX»á˜RCãÉ[Òœ<r&pìJ@„!(?øeãòËHø ( xU)TóÂUöÕ¾ö €=XUHÀgD‰ŽBî""%J'• U] DÇ·ÑŸŽo…+{âq‹}Ü"µ\j<2$BU(T‡DÇódAKtøaª£H¢–#êà| kåCì­kêê²ìw©K!T¦:ßïàE×*ý ÉU»H¢˜'6™‘Nþ•‚Õ3±L™ ÿ Ñ0[@¬eÁÏ%3È•Nc¦ãf1;žLg §Ê¶v8jV’=¸QÔ³ƒå؃f†„X~Ô æ‘äáÌ’ÑÞ†'”‰Ô˪Ӱ˜UÇ9 ÑYpƒÉæ¦ò5 2š.çò£æãûxÄ>nù‹|à¨ò¸…DòpXõyÞ0j<ÌK£b5/ZÎ+0Œ®øÅÄ–”Œ<2×b顿lb#¹›eÊYsup2Çk¢”Î)ăµìt0²Ì”/ØžŠ±Rr'™xE%‘hW 3PŒd £ }T[úÐFJ]òbö~Çbk!Ф½òhECÒÿ¦; ¨šÚ1¼n €²´S œV§â´É¬òˆÝU?z|™Z‹RÐEþ¡ŽZ~—»¿ˆÇšÔx<¢©ÅL(thg«âyª MÃûZq’+ÇiNa´œ€ÓvYôIj}«û‚w‘h„Tt 'ªª×¶êÒ(ɦG§ÄȰ3 Š`yd£ –ĉÕ"®r•Ftq½p¦;.YëmR@ŽÃ$‡@[:Œpv‘¨•æC‡ZAâL×kÏÙô1}0W§é„#-V±¡M8¼]ŒË^k\ÃדÆ]Ýw°sa²)§’äìfÎØó‰r©#¼²°¥R÷ ¤æã–·.¨úÔÿĆt&Hê{_êè—:ÉðöÂ-ÓpøÖ+É(Œ±G›3FÍâ±1Z LÜW;ãvL†ÿÑ_’_FC‘Q‡ƒ²0›\ÕªV,«T”Æ&2A F´ƒ]}Ï›âÒ¤D›?uQê‡ l;X\Q"6Jì˜ë H˜J‡ † 4iú x+[yU0 ¡±üd@šËs­TÝê¾êÁ…ª}Ú¶ì5A6Óï·¸ªUÑ$‘º‚XÛú“@Núìde”«|S' ÚU5L‘Žôg{Q‡¡©>Òd’ˆDUð+3h:‰ZOEQ=b`jšø'>áðç9s,æÎÿ' à ˆ‡R£«À¢zV°Ò ÒĆ>dË|Т± e[Ö>Q':ãæº#<öÀ4´£“}ï¯á“‡<Ñ?°vJjR 〠Z`B3lÒ˜»:¥WL`†ã‚ç“´‘klÓ—mH9Ñ ‚ŒÓßL,ÉÃ,L:‚‰¤ìJñáuÀB¹Ùb€d8Üý-œÂñV¦Ö”[öoéƒnàÇ* „=<ˆ ™Ç)©ÙŸÈÑ`và·‘\c,FÊ …†‡±ŒL@ÀàˆOÈ„ÌÝ=±ša…O¸ÞÍщWÄÁwÌ•Y¤P–ä ñ\„ ]à­tÞ.Q¡t†Ô½ ÿèÕ9Dý©ÙOiKð ΋ ü°‹JÌ Ù1¼’ÍY¹O›PO[iÄ?8FÜFXJ¹Ø‹½“¸èšD‹HáÚWʼne„U$Ð žÚâÑÊ–í”—±K§È ã‘”‹±?9Š?]]Ø=®x§}Ú'Ò ë±MØ„ëù ؈0êPè„ìÀØÞÞÎ< …NÈÀNÐHšeT ­˜… ø-l¾phЧYpCÐÜ#ù讵{è£[(†ðÅÿ…¸Äš ‡$°ÖB¶`LÓ'<ÇÌ Ÿ…ZŠ8Àæ2¥ÁFR ~ÁšIh¬+¸¬‡A€âŒð“’\b$%­d$ùèÅÝš&ð‡À H#’Î5XËFíÓ„Æ<“ÂÝà fÆ\…P¢ÕþŠ¢hÍ:)Œp-RÎH•>ãŒR U€> í2>ÅU*…(…rúD˜€¨éP•ÈY-=¤` n™§…Õ.$¡b§eâ¶Kh|È?UŠfÄ¡üCÓ­ó<·Xnò@ODDTUÏ3pD+¨–¢Ôá˜E ­¥ uhbXY†’ì pL @ŠŠé³ÎHÿ¬gi>Ù\ÙÑi‚®+úÜfДF\ƒ–,ï#&Ó ½JÞ:Ù±nõ2ëõönqʪq’fq§M£“¾Ù*Ö?R˜mÚ¢­tBÅ<‰Ø¶NÔÈP€ØUˆ(Tàüä…QqÕC*Î!eÉaQZí0ô€f”[t¼ãáðÇ(0eÝÇ‹Æ2oh ÇÜÅm _ˆËgéÅ,¸Eç(MsDÂRÛáÄ¢À\ØGÎF‹Fªìd¸,»^»º,ŒÌ¬‰nÍú ÎB|   ºC³pÃÐÔ¨~lÄ#¢±ü›ß‰p¨ oÝJàOÌpÕ–ä’’hQž¨%Fÿcô0ˆÙD’oU‚ëù I·&Ü&…ܾjÝVEW6†L¸îV}ª‚˜ äYo¡å‰.ç2 Xέ,ŠZÉåT`¨©C ¦±,„5j[hŽšêEø˜îø,Š,Rª?irÇSÇ8 š…J ªX‘æíŽæí¦÷ênïÞ‰]Iȵ|´Ø¦m:âú,ï—WBÙBIDµ.Š„œÎŠ¥"Y ²²v¯‹é!«XŸÄ‰¨¥Mpk–BÅù ƒùÚÚv+‡%ü:%‡Í/ô^VPF†õ‚Ê:RG<Ÿä©Ã¥èbèàèà;…*H®=Ž5íšÂ*äfeÈ[BùAÿg-¤ÅRF¼(ÑȰ DØÃ!Hâ¹À%9hДC†IŠ¥‡EVHF÷ ·tŠúÖsäÌCª üQ…žÆïefCç Då”ÌÅ'8 U ¸æuü×rì,Sk‚nGø—[†ÕZ-—äwrÇvÐÖuhž\…MÀ±7Ã8«­Ú.VSp©Ð-ÝÚíìZœðœ· .Ú…"!ãõ²fï^ƒ"™zZdn +r!_þƒÑ%‹O+‹E°GEH±ÏŠaKlzPÜuB^äŶ€ .žž÷î5qö.,O³«FÞéêíª´(/³H¤ßáÙ™ííÝAäÅ5”[è¥AÿÏIÉ)FIØMo %¨f†ÉîW¦(ôŒ¼h¡8‰I\‡Éûzó7/…Û&ÅØâÈŒ´s;ÛpΟ~%xE¹ CaÔÆã3Öòó˜ñKÆ g˜=xÒâ(N7þÌú0{D͹ü0éÅ?¨7¥°_„N~ÈÁ֨ВNÜP¤ NòÅǹ­7QÂȈb¸wó Š6F2h5]ÂØm­Z ЉDWŽ,4:—œ·©ñmÓÚôÓØÃp°G4èAœ°hÙƒ¨E­mËh«,’ôRÃŰ žG–ô…¯]ÜÇåkÚª´¶kxË]…>„ôz’Mÿ:–!Õ§œ‚:Nü6Ì•P^y‘×V)à¹l ¢À͈@3!ŸL?;€uÍÖWÞèÃè!]LÖŒöˆòaìrô‚Ý@#àW’¬1°WÑ ­añ„O¥Vó]cY­ô¶DQ:¨œJH ¦“y¢oú&öž&”•¢‹õrýh!¡E¦¨Õ¼ vøLv/£Ï´ô¹©Å ßP™hŽ™(KÙknó¦+²5À¬DI’%ŸnÙèQ=XV˜á‚]™ø8Á›,Îå6Äú\™žJçéT¥µÔén¶ ´T&zGx•,þŠ íʤ¹Á"€pv¥L €Ð+úÞíèˆÿ“;;OÆU\q€‰MÙ$y„ÇćŽPFmñ£MÅ(q9M±l|FmüÑ7ÞÚC>ÿ|­€ä{1Œ"‹>(†´‘æDŸÒ<_gˆœ>ü–>”[÷©i0M%Mq%œÃX`$þFö?@¸9•f[§l;¶¹iEP¡›mš²¥!çæ•Ä¯v¸£Ä^šWn’¥©å柛‘ÿF}üGGå¨miPn¢TB}.ÝØÃ©óãÍ„:·ÑéXÑ^B,Àà ”pà«W±fÕº•«Vc¾Z Ûu«‚«¤*M›*JðæÆTš¹ ïÚ¥ë†RSn„©ÿ+ÌïŽ]…+šÚQñ®ö«·•zGÑEËašÊ+“•m»N(5g£#:"9ƒ@ fshÐ!ÄNe“³Ín”8?ôüˆSEO–pâè2ËR7¼øïQà2îDNez… ›p¸.oÎôT‰“EϺ̴ÙMξCØŽ¸oãFrcÜú‹#'öè·³âþ [Ä=Ãb.S ä…v¸l!p0 Ór3HvÜh =…&¬nBÁ kk §ˆ³@8€°‡¬aäÊE}ÄËÆi´j*³¶P«Ç¥$à¨aÖø(–€@ÉH#N2‰$8*úˆ“öû§Ê*wÈJÿB`ò &—¾Üf”˜„‚nŠtHä„#G”DsÇ%:¶©É!—nsInðtç¶N€E?ÜüGvÞ îMåd1Ô¼ ÎPßþ ï´ÑHêD%о$' }èÈfQu ùçD+-h%•<Ú¡ª£’`.`Ö¤Ž ò(XðƒÅ#|­h›ÅLÚ¯–4Ù¡—’E¦c­ˆdœ´ò¤Q&õ¡˜:ñI8ÅS§lýs\74Âh˜giUë 8@$PˬªbÌW_}Œ¡‘ƪ\Ì·€«(`à§¢¢-ñHð¯ì¬,°¿´n/zsÿ6Öx¯—8æ/!몣cAÿÛ‹kVûè ï–xTYn%×HS¶lŒ¨,¶?³‚æNx“-èÌü•8ó5Np†S:ðŒszºQZbã4NÆš.«1μ£ º´Nê:,¾¶"Qí¨ÒŽjeúLŒYÄü –ïfª(°=AØËxbË4±˜Ü…Æ”f šS 5.l—¶¼ ÑD³\¸Š„«ÌÒ×ó|¿ÆßÏÁت¥žj H!„Y †q8šT‰Î0“Äi¥—búO”È…“$Ýo#iJWw˜•F¶‚Ä(!tTÙçè+§7ÌH“M¦ŠÊSN×þ©éRU±ÓmÞŒÙêµú1Ã{Sºÿ4%‰"ûU¢-|Ò*}Trè $’ôànÿ€Âª¢°w±å] »$…5‚u¶À1b‹V-ë³<ÁvÌÚÁ%D’d8é&®J¸ ⓜˆ«‘SAt"{â#½0 RÜE/äÀ`PÁUDp|‘މ[ùÊXšx•§0@-Sa‹’7 ]€h[ãŽeÜ ËtâA´¹ ¹0„ÆÆQèBÒXuÀ¨aÀ#šÊˆÜ—ˆÃ è0D>~Ž ciá¡l€…t±j;£eFÓ CG&ëÍpF“U\ã7ª8\¨g¿X.ºé4KV’7eÿ+Ì[¢R¹;¦ÅŽu¤%ÚFÇdÅån¼¤#Ãж`Ò1eì‰LÃŽêX "%I“š …ª4™LM*©æÇÂ-–SQ欲9«ÔË*¦ƒbÑ™N«°h` [JÀbzØ=íi‹ûõb#~úÈ 5á“Óü‰~ª"¨î~‡©’pé?¬JŠÞ•¢Fp1F@_%ã1H?,‡Çˆ;’g%‹ZÇ ø*¦˜ÀO4ÀS'*éÒÞ ï&œ±R”î'¥Ê0&0Éi«ª2+L¢AdËPÙò@¶$…y¬[Ö@8 >pVÉÀ2Dâ}hÂ…åË¡&e<Ùc¤ÑÖÿ(ì± 1¥U‡—ÜaPÜ¥  "FD«ÌëtX ˜:E l`K™Š<‡{ÆasØcEáPd/ž²ŽA¦c›3 ³ìØM3!wµ¿uó)&šå,Ý6 BŒâÿP]S7Ǽ‡ŽoÜôB1#PŒŒŒ&L£s8ÌjÆ:ÙÌZÖ´ƒc-r2ÇRŒs·3XÚr*&*˜i©k˨౛±Ì¥Þ¤0̨ô Æl=vP -“ÂVpjèÉjª&5Ñaå3ÅÆR´‚fsKJûÍ«SˆV霊äX§s*TTàsèAv Š€b È˜˜ÿR:5¡ªZïÈÇ¿މ=ûG‘¨RWDtÆAT®Ð Y)ëê2!2@˜ vY•„BÚA2 „?û…~-u KÇô̘„‡$ñþ|¥+aäøé2—A˜À/å]O)s‹ª0¤`¨”ñDÛ•T[ÑêÇ@xÅL蔓UÄé£à)âTMwôù{h­‰ ª!&w,€ae ºhçÇ ¯C¼ ®ƒ³\¥9Zð§™Ø`µ `ÂøÛ7<à ¤pÃ5ܰРI‡5Sˆ&RÃ^4RÓ4ÖSåDLQ€·˜ŠØ­%w… ŸÌÖ¼æ•˸9ZøSŽ{áÍe£éÉÿ&B½=Yíò˜48¦1…é¥Ýè(La;-&*6Þ}ZíÎ{ºõn |Ü¢E.6DLÖsS%ÿ]šà¬†ÖÒÙY}‡†ðlîBg«®€Ã9`‰—S+sõÅõeŒEå)ð”ç6¼VƒƒêXÓšœ†­ÿ ¥ÏÿPë˜ s•VÃzÿX“)B•(^cöyiu@6³.ÿ€ÖEŽ,’¤c$$L7¡™®tnµPPO^é”éw;wIË\ªCYW•£ŠÆïBË™ßU0³×ØÌ"\óP…ʺ¡Èªû>øONuO4åøŸüîšA‹†O )üžÄWŽç­â²ƒ´†1€£<ÿÌ=¯4¦÷z¾qâVù+ÆAŸ¯©‰u,(Ò@šxÈ"Ó+Ž|Y\ÙS‡4ʬ½qá é^š6‹±o9ÞÚ>öíQL_ª]—Š…[ŽóÉ`zãL>B šÓñöÅJ¹ä&2çV·Úäí÷šŽwv¹koÚ¾G‹í/¯´tÆoÌÆž5#®Ú+„PÐÜIBƒc$Üàl¶Ë›Ì‚:ÀìÀL'ôÐs«- LP D!cH^殡ÏphÅ\®¥Zn~B%€ $Æx-ˆÈ,ÐΨ†N͈®Ç’Τ>|ªì>ÁHZ…H0¢,JÜÐÐ[:a𯫢ÿ¤H¸ÎU€ÊËÂLîDHÌÞ¥òÚ®^ˆ¨^V°ò–âíÜŽèže®²(ï”å‚à` ¸ÁÎÜ€fÄVìòD6þ#Kêi0È xp$ˆ$Y.ᇔªÆÎNˆ0m`æe`ŽÈ*’¨¯Ñ`<­Q++-¦B õ@!TPšÉfR)TlÍÖ,©2޶ s®ÂFÓä-ý†/Šï1ÆÛ°¦q$äd¸Ogh7Ü`qjmqD ;Ž oæãû0ámü~üŠøˆQøØ¯¼Š‰Ùî@ðà~þ¢ l‘\p³B6üc>Ž">¤k„/ü’±ˆJà;O»‚_±·‚Eÿ "pQAž!÷î¤ ¸ èäRtãìàÎ è(ª¢ò ¦ÒôÊÒT0ˆ–bçÎUz &ú± †‡pâ ¢ò ûqõQ|¸¡1r†*B¼ 麌 pVÄL̆ª¨ ²ÆÔú°í²p ÇŽîL 9HÓà€…²ÐðÎl† 0%{°Ç íŠDE¨ d èÖîÌÌ ¦*Í"9O‹èÕ"§‚âøeݱ,Åb`̰â©ô&±BÿâÚc/ƒ¶ðºTDÓ"nœ®âq–žÂ¶žÍþá‘6댺Mh 60kgp16ÂB Ó5$&2R¦»0SçÿM–²Kü<³Q‹ÞîmøÊ ó# Pï-âÃ<#C:áRo`4øK5ê¹BjÇïÝÞÍ,4m`ÎÑ*4ùÒÀ8‡Ó®‚Ír9¹EèÖ’kžL¨„àn0HHè DÞ… ‹!¯¢Ò®p膄v´êTE­>OÊA­†°#õÄf b°Q|ÔP »§ (Ì$*¸ó ·Ð]°òú°+dlîØ,¤¬Êî” ïð£ö€€ )+!ê‚>³®á™ Ãz¬Çeë†A®øé#Ðð82þn†µè@D7ÿŠQăģ’*I;\'*’ÂEÍâ€_µrF ±+‹èFÓBG®âìa?uaaäÀÐb`N ©È÷z//Í1S‹“IŸÔºliJùMqê_#w†\>ÔzTÃXãGeE”Œ 7ñÔø¨ÍÙÔ´MÑï–ä­rØF©Í@¶†:,æ/ºhGB1Ðõ/¢a/È¥2TãdSÎäüj#¥Ô&v ±º #v/15cPS¬ˆäBaölÉ"G¦¢FUd^Ì"’UåV<[µUaUE¦R„A*â†F¡{Ĥ{J‚>¡ ê„\q/ÉXÅä–CfzÄaÀPrŽBÿ®"¬*JbËZG%Yr@[pVŸÐ„þ¡z‚LjñÌ¥~ÊA(3TireON!nA^ætè àhrðuEúµˆ´ò_–m «ˆÂ²`W$aÑ6z›èÀœô**uIÃ6c‡S85§ˆÄÙ\‘r&{ÃXcx´§™L"2É7Dj•ã¢viN.e=$f³/£ndMmV˜®tv˜â‚Ü€à0ø‹7*‰úR#÷â?~Ò=£]Ÿ#8NNwq7n—õd ¬`Q'±Î‘E°—8¿vlÕ,–Hz]8ÔÈx]µnçöUkØ ½SÆ,é0—W;p˧ ¤ÿƒXIÃX/Éq ¡w×$UÖ<0p®¬É’¤¨„KB¢€¤® C·ÈŽBþŒbôáÊn(€FÁ<ôáPÐJ22%ÎðBâcž©ˆcfi’8[p—rG>„ ’Š6oó Ñ+mô*š·yÀl_8’÷El³7… l{{Î,"Ö,R x—Ž®Íghƒ5¾Å5³pFDöviM Rïcº/ÁÈ: g.¦”¶OÏíܾQV託”k2Lƒ¿4Ã7ˆÃ×ç÷âhùÃÕìx9 ÑávõøV!gèÀ€ *9¼¸lQøÀÔQG%yÓÿ‰EúJyåe†kønr&Ûn‚zàˆe 7ÿiNøÄJ‚B6žá(GÓ÷v[Ù⡎§"0¢®3 xâ4n$T×x¨¤ë¨¢UÊXŸË#LR¤‘Έ¥…ŠN%<„ŽËu|EŸå&!\Íf£8â8Xƒi¡dh¡Q#a`üÆD1†­b‘ v”’Ùù©Ig©÷œÅ¶`-†-õÀj¯LŒÄ¤DoS0®¬.Ji÷"àH8tz˜Æš©©j¸qŽ„K„–.³OpÄ'fÜè¦.è:¶„ÖKc2fh0DŒ˜ímf%X‡±*¢[-Cè€è€üÿ`üÂY0ª£-+*¦`Œs´Ss´S¡:µ™ÈÜù+9Ï*0ÏÒîönæ]¨è]¢¢ª´]9±  /%Ò r°U4ÈJb!~’ÿÜ€•ÕA)ÅAd«Æ£Ò@Ÿôn$ôÁIŽdS®%!J"J¶®»¹.'ÌøÊ†"'”R¬&Â8D„€ ÀvŽ)D(H䉂ì#?”ÖD¥¥ajá» Êb¯"^¬B´]»y[»…U{Ák+ùÁ\E¦‚²–aM¢i%ë'»o>˜­ËÊKŸ9l ð€!à²Oÿ¢gôo2@ùÎî#c–¯b"$.{‹2s±ÄÇ•‰cl\ŒÒÿãNÁoü¦BHÙ"«ë³„-Ëk£‚E@»I{©\lÐÔ™Áµ|ÁBõ*¶c[<ëª2*8îe5¡Ä™RŸyEu ªªÂ‚$.X€e?â#ö\" dºa̤“ÅŽg…>r Ž…ëJ, nƒÄt(Hì%ä$"Ô[]„®*crUO*—*å©)¦¢)¨¨rüª‹¨k{.c œŠ˜š…·<ÖCoªÍ™Õ‹-â±¼€W5l[Kó(*ª"?ôDä¦>ìf@ä£4ý†.¤5+fŒÐ´:‹Ö:kþâ¶„×–F±b­bR)v“ bÿ&^ÐÒÊ‘sSÉ6+¨\td½Þ°y½rób»ŠèT¤* &m½n*( a-¾¾ç;ƘªuX‡Wž¸U‚Å';¨'ãˆ$I ?¨¥'XOZh†~âÉô³Ä*!ê­puƒ€›b¥¨†“nåF㯢“­-¬BÕ œI[ýÝYÛÞ…žô3–Ö­òÖ‹Qa¢b—X'*&«§‚3‹]€s).œ>ÙïÃûèh€ëÍo°£”ˆË·:±ƒ†³ÈågêK4Zû¸iDÆÝ½öR/“Pl«Þ¹¢øœzèýãð]óŠˆß[õm“¾)žâG€‚&H-T‡Õ*«Î$ÿÈႎâ©$ª’Š˜…Ìî(Å{$¾Šê¾§[žì­ÐŠÙª]¨Ê|hV¨¨Às¶e»xaû*Œ:ݯ‚ç1vlæPû~l ¬çÙ:¹ÈÓBH›ŸÈÑïH‰y؉Y x0©pÔë™Î^ç+3ÊÊ·°)š®'i€f¿Ì”´ŒäÞ’©Zïß½+þ¡ï‹?ÿ1®µ]R € €ˆ‘€Œ†ePÑE˜`ñ 0 bO$—d`i$Ë„XºL¹åB;†y•FŸ›mnìÚFGè¶NîF‘£“”ݨ¤äF 6ÿJ©¨F‹.Ë&u¹Nö¼¦&$fK'æ(`­@̈KP`‰¸ðÆ(Pa߸ÿÅL¸°áÈ+^̸±ãÇ#KŽlð¯ÀÊlJˆ»Y ¶'ØTÈÁBŒA­Úž”¼^=[¶jÛ‘‚½Ïa;LÙå¦U§âÜS•|¹¸Qì˜ÓYÊ5j¶NN¹Òë¤}WvÜ¡jåf—<°Y3TÈ". ΀ãO.üOßüûøóëßÏ¿?ccì×]Í¥P ©ÀÖC 1¨‘DxÔ‘K&écRH*¡41‰TÓ07퀌¯EG‰PRŽ*_¹ÃâS~|ÿÅÍP”CÇQå %U'DÙ³ÌQFò%ÓƒY`!›­e\=¥{q}æ|–5—>‚ùçå—`†)&˜•) @y ôš 5„ i«¥gk¯ÅV'èÅ–go¿í È»ðYKq?ÑÑÊÒEõœ¢:f“ÆQ­ðèÝOÞBÏ(Ïtri6tç›·Y´íi†¥–™MfL—c¶êê«°¶ ©…fШ 6ȤC˜&á’ž$rˆaLÉì°ˆˆ=, â+9¥"‰nÌT9<ÒQÎ'Qa»7¤¼"„¸§¤‹„¤‘#C™X$Hž´Ñ„›Áe”¼ ¤ @"ÄÿÕ/­¨ú%—±lðÁCffƒaÆyi2$'k´ÁæZz{úœoþYKp;ðdÊOn˜ò(w”^w”ËWnè'<á‘qÂ}¼Cnµ¥VÚiÝpg»fi&b«&ìôÓPGš@Gœd‚Vô ’)y¡HY2!‚˜EN%ï`Kzìpî)ÕR» sgÓ²&\Ù O°ì`s#.Y¢¬†ÂºäQFi—®÷²µ/ÿB—’JÇU«Qg®ùæ­.ÝkC”‘i ¥æƶJ‰=*(É<²C¹'Ã}ò6iwÝ»sDzÝ*C‹^L¦st›Ðê}ÿÎA.°µfÒÐ#-°çÙc çØg¯=ö}N5[)´…ñã+ øIçË„¬²öílÉô"­¹=”; p¥2Q»r Þt¸Îsž@C)'w;è…±R2¡‰$.qa¯ ¢ ƒDŽrWÈÔ0+Ôg{ ¡óƒÓ($#¯9ÉŒ…žHô.ôëSì iP!RæÚý'»ŽîüžktB~àWTæ(ßÔ=«1Íò–æ1J˜ôâ2½øüãz# £ÇHV•-J2Íø”¶¶õ 'ò{ß+ì1Œùõ¢‡iàF«e‡ÕÍ ×¹Æ(žs æŒÿªP‡*©HN‘à ¾Q 4d‘*Ž-öš *¸I¶ôË Äà;øA2šò”bÄ\| bÓPOä±a‰‚—2@éÃÀaíx¸ è.f;àŠ ŸÃHU CêÅ1Ù #ЂqØA"vð‚Èhxž•¢wª-fI` *ÇIN2šÆ 1Í$MCCÑ”*7ˆä†ìQù3`4žl0™†Hæ2oqLy(ÓÄÄpvš˜&“™|çI4ZTƒq™UÓÊÉÑŽnŒ—‰K+ÀÛ<“‘‡ôÝÉxbOÛõˆi¸Î*ép R™È¼E<‚Ê¢§³€ÿÂ3Ia„D`…]` 6‘ÆÔnrñ©!Ý’*=JÕªf¤dË:]2IuÈT…ËFQ¢àï'9lÙ ™“HeÞB:ÕéO j\TvØ$¨y‘mdJúŠËã>y5ƒlp”Ù¨UËØìÑ4¯y .j*ÖQÜ®žnˆÝð 7¬"€‡l+X{JZ‚𾂀€žE!«ÛlêÑ Š*Ì\®±¸Í-ÔT ƒlu%Cð%ö—²4Øóv¾tƒ8تHt ñ˜kOóaÀ\Ða7¹AÂEX~ùkrq9lF=ˆUÝš÷¼S¥B Ò[ã ÁO;KƒãRÄ”Ÿ].XÿiWpèÔŸmÅQ0Iƒ ì3‚Ù&œ«ì’9†%Ҭε®%£Ì -4aCDMì8ìÀ ¾ò®—ÍìÈ”÷©‚¡µ£ƒãf[ûÚŒ¯ãr‚îÛØÐCö„•ír›;1©F­©ýìs»ûÝeD•º'ÛÚVÜðη¾F˜væÎû¸Àù]îMàOøÀí#  \áøñŠ <ÕϸÆ7žë€;mpb-1.5/doc/introduction.html0000644000175400001440000003463312315325533013245 00000000000000 Introduction Go to the next or main section.

Introduction

MIT Photonic-Bands is a software package to compute definite-frequency eigenstates of Maxwell's equations in periodic dielectric structures. Its primary intended application is the study of photonic crystals: periodic dielectric structures exhibiting a band gap in their optical modes, prohibiting propagation of light in that frequency range. However, it could also be easily applied to compute other optical dispersion relations and eigenstates (e.g. for conventional waveguides such as fiber-optic cables).

This manual assumes that the reader is familiar with concepts from solid-state physics such as eigenstates, band structures, and Bloch's theorem. We also do not attempt (much) to instruct the reader on photonic crystals or other optical applications for which this code might be useful. For an excellent introduction to all of these topics in the context of photonic crystals, see the book Photonic Crystals: Molding the Flow of Light, by J. D. Joannopoulos, R. D. Meade, and J. N. Winn (Princeton, 1995).

Some of the main design goals we were thinking about when we developed this package were the following (see also the feature list at the MPB home page):

  • Fully vectorial, three-dimensional calculations for arbitrary Bloch wavevectors. (The only approximation is the spatial discretization, or equivalently the planewave cutoff.)

  • Flexible interface. Readable, extensible, scriptable...see also the libctl design goals.

  • Parallel. (Can run on a single-processor machine, but is also supports parallel machines with MPI.)

  • "Targeted" eigensolver: find modes nearest to a specified frequency, not just the lowest-frequency bands. (For defect calculations.)

  • Leverage existing software (LAPACK, BLAS, FFTW, HDF, MPI, GUILE...).

  • Modularity. The eigensolver, Maxwell's equations, user interface, and so on, should be oblivious to each other as much as possible. This way, they can be debugged separately, combined in various ways, replaced, used in other programs...all the usual benefits of modular design.

  • Take advantage of inversion symmetry in the dielectric function, but don't require it. (This means that we have to handle both real and complex fields.)

Frequency-Domain vs. Time-Domain

There are two common computational approaches to studying dielectric structures such as photonic crystals: frequency-domain and time-domain. We feel that each has its own place in a researcher's toolbox, and each has unique advantages and disadvantages. MPB is frequency-domain; that is, it does a direct computation of the eigenstates and eigenvalues of Maxwell's equations (using a planewave basis). Each field computed has a definite frequency. In contrast, time-domain techniques iterate Maxwell's equations in time; the computed fields have a definite time (at each time step) but not a definite frequency per se. It seems worthwhile to say a few words about each method, and to explain why we want a frequency-domain code. (Our group has both time-domain and frequency-domain software, and we use both techniques extensively.)

Time-domain methods are well-suited to computing things that involve evolution of the fields, such as transmission and resonance decay-time calculations. They can also be used to calculate band structures and for finding resonant modes, by looking for peaks in the Fourier transform of the system response to some input. The main advantage of this is that you get all the frequencies (peaks) at once from a calculation involving propagation of a single field. There are several disadvantages to this technique, however. First, it is hard to be confident that you have found all of the states--you may have coupled weakly to some state by accident, or two states may be close in frequency and appear as a single peak; this is especially problematic in higher-order resonant-cavity and waveguide calculations. Second, in the Fourier transform, the frequency resolution is inversely related to the simulation time; to get 10 times the resolution you must run your simulation 10 times as long. Third, the time-step size must be proportional to the spatial-grid size for numerical stability; thus, if you double the spatial resolution, you must double the number of time steps (the length of your simulation), even if you are looking at states with the same frequency as before. Fourth, you only get the frequencies of the states; to get the eigenstates themselves (so that you can see what the modes look like and do calculations with them), you must run the simulation again, once for each state that you want, and for a time inversely proportional to the frequency-spacing between adjacent states (i.e. a long time for closely-spaced states).

In contrast, frequency-domain methods like those in MPB are in many ways better-suited to calculating band structures and eigenstates. (Here, we consider the case of an iterative eigensolver like the one in MPB, which iteratively improves approximate eigenstates. Dense solvers, which factorize the matrix directly, are impractical for large problems because of the huge size of the matrix, and because they compute many more eigenvectors than are desired. In iterative methods, the operator is only applied to individual vectors and is never itself computed explicitly.) First, you don't have to worry about missing states--even closely-spaced modes will appear as two eigenvalues in the result. Second, the error in the frequency in an iterative eigensolver typically decays exponentially with the number of iterations, so the number of iterations is logarithmic in the desired tolerance. Third, the number of iterations typically remains almost constant even as you increase the resolution (the work for each iteration increases, of course, but that happens in time-domain too). Fourth, you get both the frequencies and the eigenstates at the same time, so you can look at the modes immediately (even closely-spaced ones).

A traditional disadvantage of frequency-domain methods was that you had to compute all of the lowest eigenstates, up to the desired one, even if you didn't care about the lower ones. This was especially problematic in defect calculations, in which a large supercell is used, because in that case the lower bands are "folded" many times in the Brillouin zone. Thus, you often had to compute a large number of bands in order to get to the one you wanted (incurring large costs both in time and in storage). These disadvantages largely disappear in MPB, however, with the advent of its "targeted" eigensolver--with it, you can solve directly for the localized defect states (i.e the states in the band gap) without computing the lower bands.

History

In order to shed some light on the past development and design decisions of the Photonic-Bands package, I thought I'd write a few paragraphs about its history. Read on to enjoy my narcissist ramblings.

Many different people have written codes to compute the modes of periodic dielectric materials (although we don't know of any others that have been freely released). I have had experience with several programs written within our group, and this experience has guided the design of MIT Photonic-Bands.

The first program of this sort that I came in contact with, and the code that was used in our group until the development of this package, was initially written around 1990 (in Fortran 77) by R. D. Meade. As this software grew organically over time, several problems became apparent. First, the input format was inflexible (difficult to add new features without breaking old simulations), sensitive to whitespace and other formatting, and required repeated entry of information that was often the same from file to file. Often, pre- and post-processing steps were required using additional scripts and tools. Second, the many parts of the program had become intertwined, lacking modularity or a clear flow of control; this made it difficult to follow or modify substantially. Parallelizing it, or removing constraints that it imposed like inversion symmetry, or even replacing the input format seemed impractical. Besides, even reading code with variables named gxgzco (in common block cabgv) (honest!) is a mind-altering experience.

After an initial experience in the Spring of 1996 at writing a code based on a wavelet, rather than a planewave, basis (which turned out not to be practical), I set out to write a replacement for our Fortran eigensolver. My main aims at this time (Fall 1996) were a more flexible and powerful input format and a code that would be amenable to parallelization. I succeeded in achieving a working code with similar convergence to the old code (after some pain), but I discovered several things. I had lots of fun learning to use lex and yacc (Yet Another Compiler-Compiler) to make a flexible, C-like input format with variables and other advanced features. Having input files that were almost, but not quite, like a programming language made me realize, however, that what I really wanted was a programming language--no matter how many features I added, I always wanted one more "simple" thing. As far as parallelization, I quickly realized that I had a problem: I needed a parallel FFT, and the only ones that were available were proprietary (non-portable), used incompatible data distribution formats, and were often designed to be called only from special languages like HPF. That, plus my dissatisfaction with the available free FFTs, led me to embark on a side project (with my friend Matteo Frigo of MIT's Laboratory for Computer Science) to develop a new, free FFT library, FFTW, that included portable parallel routines. Also, I decided that attempting to support too many models of parallel programming (threads, MPI, Cray shmem) in one program resulted in a mess; it was better to stick with MPI (supporting running only a single process too, of course). Another mistake I discovered was that I allowed the eigensolver to get too intertwined with the specific problem of Maxwell's equations--the eigensolver knew about the data structures for the fields, etcetera, making it difficult to plug in replacement eigensolvers, test things in isolation, or to implement features like the "targeted" eigensolver of Photonic-Bands (which diagonalizes a different operator). The whole program was too mired in complexity. Finally, in the interim I had learned about block eigensolver algorithms. Not only can such algorithms leverage prepackaged, highly-optimized routines like BLAS and LAPACK, but they also promised to be inherently more suited for parallelization (since they remove the serial process of solving for the bands one by one). All of these things convinced me that I needed to rewrite the code again from scratch.

So, I started work on the new package (in Spring 1998), this time determined to develop and debug each component (matrix operations, eigensolver, maxwell operator, user input) in isolation. At the same time, I was thinking about how I would implement the user control language, wanting to develop a general tool that could be applied to other problems and software in our research. It seemed clear that, in order to get other people to use it in their programs, as well as to avoid a lot of the manual labor that went into my previous effort, I wanted to automatically generate the user/program interface from an abstract specification. As for the control language, I briefly considered implementing my own, but was happily led to GNU Guile instead, which gave me a powerful language with little effort. So armed, I set out to write libctl (which generates the Guile interface from an abstract Scheme specification), partially as an experiment to see how hard it would be and what the result would look like. After a weekend of work, it was obvious that I had a powerful tool; I spent couple of weeks adding some finishing touches, writing documentation, and so on, and proudly showed it off to my groupmates in the hope that they could use it for their programs. Without a real example of a program using libctl, however, it was hard to convince them to plug a scripting language into their existing, working codes. So, I went back to puttering at my eigensolvers.

Of course, all this time I was allegedly doing real research, and long periods would go by with little progress on the Photonic-Bands package. The original, Fortran code was still working, and in time one learned to bear its quirks and limitations with stoicism, although we cringed every time we had to show it to anyone else. By the summer of 1999, I had a working block eigensolver (supporting several iteration-scheme variants), a Maxwell operator to plug into the eigensolver (including a "targeted" operator, whose convergence I was unhappy with), and a test program to do convergence experiments on bands of a Bragg mirror. I hadn't attached any general user interface, field output, or other necessary components. At this point, Dr. Doug Allan of Corning (a former student of Prof. Joannopoulos), heard about the new code--in particular, the targeted eigensolver--and began clamoring to try it out. Not put off by my excuses, he asked for a copy of my current code, regardless of its status, to play with. Not wanting to refuse, but aghast at the prospect of someone seeing my masterpiece only half-painted, I told him to give me a week...in which time I added the interface and discovered that I had a useful tool. Over the next week, I added many features, fixed bugs, and wrote documentation, drawing near to a release at last...


Go to the next or main section. mpb-1.5/doc/tri-rods-ez8.gif0000644000175400001440000002241312315325376012572 00000000000000GIF89aS`÷þþþþþ þ þþþþþþþþþþ þ""þ$$þ&&þ((þ**þ,,þ..þ00þ22þ44þ66þ88þ::þ<<þ>>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿ‘‰óÇÑ'YÉþ)\Èpa°U™éa†J’7^¤(‡ BŠÜÀÁCˆ)^Üø‘„ 6zeZL[Û e}rô'?‚ !BdHО9h¸DIbdI•1pö"$¨6d¶HI"dÇ 3jä’¤Š7wúøÙc'›4hÒ¬y3OŸ@…!:DÈ5`ª09’DÊ6x ôœ3^ª3¶¬Ù³gΘ%3&¬W®Z°XÕ “$F…þä‘ÓæÌ˜/\²\±ReÊ¿.mü"dŒ7„üs(Ò§UµzKfùr3edžýÚeKV«T¤>e¢äèP =tÞ¤ÿ!7·kÐ’ £>KÖ¬Z·nÑz•J§JèÏ@‚’ˆ#“dÊ)­ÈbË-¶Ð"‹,´äò‹1ÎT³Í7â'Ž7ÙH³ 1½àÒÞ{ñÕË*¥xrI$ŒðÈÀàâÊ(–RÇÿä€XÀˆwsˆAÅ?TXqE[x†kÀaGƒ$‰%›€RŠ*¯Ì‚ /ÀƒÌ2Î\–2ëÉrŠ&ŒìqÿØàCið!xœ‘…ÿTaZt†zÔjÄ5z¨¥GfdÑÄ;Ø–X?ña¨1ÇŠ âGhháH8oäH!Cí[r¸ÿ¡\j¸QkÕ¡FQÑÃWaáÐM¡ƒ +˜ €R!‘Ô# Ð <hÔAÈ$¥äÍ?è\CK%R -× cÎ?¹”2 ! r…<ÐÐ #€ÐÁGÏŽÔÁ"˜°‚ :ÑDô€C 3ÐpCFDÑ…uìáxÌ!k\µÊa§„…H!€äñXŒZªÝÅßQj„ÅFüÄ4ذÃMdaFzøÑ‡á­A+pÔ¡`t¡´Ù–Åx‚iDრ:üsÆŒhrŠ,»ƒ 3ab¶ 2Äˈ¯¨R (›XI"ƒXÿÇf„áŲYAžbÌÈ!€À8äÄ?ubÉ(®àâßT‡0É%ž”²J,ðÝRˈ¸(·Œ4Ùx#Î8äˆóÍ6Õ8cÌ/¹8á‚Õµr (™LâH"…Ò߃¢È#•p"J*¯ÐR∶¤ 4×pÎ8d¤ñRâ%™|BJ* VÿË0Ç(ÓÜ3Í$b-«|I n`ñÏ 8(†%óCº`=‰ _ÃÚ ‡<ü¡Œ&:!ŠS°µÈE/„aŒd°Í9Ë0ªà…3ÀðÀ†/lå#ÃìàBèå…D:ö¥Å… q™Ñÿîà1T! @ØYÄn°!f dhÓAˆïÀa UX‚’nm*(­DÚ€¨ÂsPH € á¤Æ?|ñŠO@r ÖÀ@&FP‚¨ 0‹ nðàC@B¨°1¨!v „ñð H@ÈÁ,‹ƒ¤¨D!-€‚¨PÅ*TŠR„‚—Ä#‘ˆ¡b7:ăØP/\! ƒ!‚„@$°éœà…4´A`,ä~ÀË"$è‰Qœ"³L…)Dá‰í@‚Šèå/‹÷¤¹á `È‚6¼q„ÝÐÆ5¦ñÿŒ· Ô9)T‰E|ȃê@:Ø|D"þщPx"~@àp…èÁ ¯àÅ1°× pˆCàðÆ6°A hįÁ˜›uL ML¢‡ð”´1 ec¥ D ÚÀ"…Á‹ÐD(rF…2”uÀÃþ@ˆD0ÏyЋ/8¨ gD£ÙàÆ7êŽÙÕŽ¸P…&A‡0üC ]xC!, P(Äí¼ÃSëPSîäÔ~„Bt•ã†@Ã?”P„!aFPªÀ…1¤ÁI|PL^ô’ˆE4"–ЄùN!KUˆó–zK!á@äרF3f‰8ÿü£ Fp슄&Ó PP€Ðƒèè5 A ^°”@„L jà$L m؃"4¡Š\C!ˆ¸ "€ ,D*‚ìðxÞI‹Bðq#)¼€)0 I‚°`; ˆ°ƒ°à$$ L¼@=ã_và!4E YÃÞ`‡ˆ¦wlø‡ 2€°à ˆ€Åws¡VEì¡ `˜|Plº%@Á ^Ô@Â;舠(XÁ ShBûX#4A ÿˆÄ,š±k c!¬DU§Ä‰P˜"¥=Ev4a‰H4‚—{Á!Ö ‡4Œÿ Ux‚rûØ"(aH†81°±hèB!gŠø(¡ ½6´wÐà ¡ºZ¢o肆D‡CpĨЅÈú nd£Ñp†28ã‹ÜÑÇ>øQíö€‡½Ú!UÈ'B¡‰EØ! ‡ûGA‰RÌʘF¢݈Ih¦HЖ‚Q æ@ƒ|ö†IQÚ ôƒut„Π+ Á‘ðÄR¢^<ØáЯά!ñ9ObtÕÆ0¾ôŒi\C%%«7¦á3¸¡Œ2gÁHÏ¢ø²,SqŠQxÂ4‹È¡ýVƒÚ/8±0ü Êd& £p/” rÿÈdÉô‚ˆÎ>B—èr)b9KTâ [@à Q RЂƒÿ°Är`H`!‰Iïã 1l M@Â~Àäà6€ Z ‚ñ _㤸>ÀÆ(de Òx†8ðÁЄ(’ˆ6X¡ ]ø+°1}üã®Ð"ð†- X1PG<ÂtÀAF°`¿`cAB´@7äa°Ä'LñIØ¡ O°:¡ vàãШE(Ñ7€¡i‰ÂæQÎP à„–ÀÄ$;¨ÉHÄ \°‚°5hbÿ©¢0*La R¬/Œ ÿÎCü³Þ5lá0Xˆ îJ LT„ Et0 –p ˜` ƒF!(nàqPòX{pL'Z0LPĵFM°n`ž°ª° Œ`yS5ˆðY•€€—@ °„`qð€p@X 5mP]P°` ºÐ ¾à ½° ·0 ¯° ÷ œ • ÃÓxk@^TM°JHðZ@‘  ’ “àn w‹P žp ®!¼„Kˆ & 6 @f“°K(£@h`à Ц Û° úÿD Ñ?qP«@SÁÃ(qÐ…rfpqA95sàCð" >@9ŠÀ «€ ð:÷ÖˆÚ€ Õ ¢f Á"³Ð ¨ ›ð Èw ¯;æÁRÏÄ ÀÐ º` ±À ¥ ’ÐsÂZ}Àóë ˜ ª°´÷Žð— ­ ÄÐ ²=äR ÐÀ ÈP ÿä » "®p ¡° ”ðÄó"âPmÐpm±P šp€ ! ¬@ ›pS‡ÀÛÈ)ô–Ð £  ” ¼ð Á0 Ô Ò` ò:ã ;<åS´ Àãî` ž` ÿYEFöà ° ÐcP†%°;Pl%€€oðhpPùC߃5¤ŸÓ ¤€%ä ìà õf Ù° ܰ Ÿ–À@ §p ƒÀQð'`6à[z0ƒ°rà”P •r © ˜ðh[ÿ€Œ0 ´  ¯  } NðI KÐO0WÐbà=&cp˜° g ªà ’zÈ„)‘’€~@kðrP›ð ¹` ¤pk0$Hð˜LàR`ù2 …І–€aÐ+@À;ðHCP€öN£kQŒoàtB†Ð’ƒ Hƒ-Rzÿ€òW‘`W ± V AP\&GjP_°Wp8éW~‡#g s1ÐÝ×1`[`rЈð9+òe  7àaðv¡|ÅÈÃXPûIæL390Üç}/@?ÓT°CÀ5øåu‚àÿÒyÓ2)q@`vd0ƒ@ ¨à Ùð÷`»àg~d™ œ@ ŠuWàEà7 \çu  À,çys×ÒG0GÐúr˲£h*z"@…tH2p>PNp2T€ ”À £ð™d~gÿà»`÷ s„ ”0s GK‘ýB§Ÿ÷!0H…Ô`àÇC°TÀB÷Õ}.€z•ÂPÀŸè§~U€\°$(wó;ôaà7°& à ‘€} f°÷Ò6 CdO0iæ—~“v[ðe Npñå=J`ßVœ ñ   …Ðy œ} ™G Ñw UØxÅCØ)¼ XGSíXI0uÊÉ@P1apŽÀ¥` ˆÐNä™Y… [`RàL0†¹ùkp¤` ¹ð ›Prÿ@~€’° ¤À ²p »€„¾ÿÀ ³) ®  ãä ›€ à™Së%bÐW0O†ûbКð º@ £À,ôDC  ©àJ“— ¨{@—zPM`&p4ðl0—p ´ ×VbI–ÖÀOÌ¥V uC °"Š€…áñO•j0˜ŠÑlP;°%ðÿ0} ¢ ¼` Û¨SaU–à åØãÓ ©ð¶Á¦ 2+9;Ö ñc à ¿€³ ¡ £Ð efPŒq‘} ‡Pl0Ë 1xÿÀšP ± R$Õò”° ¡`‡Z² ¾ oŰ6ÐVô;åA;Í@ ¹Ð ¡p ÿà‘°  ªà—e/r¹­¥5ÜY>¥À ±`„½ Â@ íó Ц=2nà¯| ˆà•° ¢€ ­ %½ ÆÐUÒP ØÀˆŽx 2 ¸° œ ue* /0^0Zö)ë鉠¨mz†À‚lð¶ ]ÂÑ@ ³èˆ,µ``m0+\‹P€¡UQ°$¿µ€ 5›„8K ýè •@}wДnà“ ¢ ‘@ZÀŽ ™MTÐ~d°˜TCÒ™À ŸàM«%4k³Ðh NP]0Fs¸²1x@pð€AÔ„°'ƒ•`fˆ0«¶‚{ÿ Œ@¾  á[ÐD _AEÀS –ÿj4yP9èM³Èl€˜p ÈWpz@ ´†àM°G°3Äþ¯tàh0]hµz~æ£Ò3Ê®*8@Sàj`r8 Èw @Pg°)°×å}à¡P РÿÀÊÐ p`OÐv ¤ðŸ` 0yàd Q€I4Ì…ú5dš£tj% 1 ¶i€ˆ  ®p ãðó€ ¬ð]ÐVЉP‚¢  `|g e~°˜p ¥„ ¸° ÿwðµÀ öÐÿ€ &›y°^Ð+ùÂÊâ΢$áy"€.À¢CÀÊbÐy`” ²0 ÿð ¦u@¤©ð ï°íð· ðp ™"z À€·]·d@ Âð ÿ0 ½ VvR,9ðGñˆíÔ¥§Þç‰ä3 ;Ç%„¡,ìY‹ 6I(0T@ìBÿ@ ¯À ‹ B­N¢1FSi0$ÿ 07 ˆð«  P ˆ°nU @€1Ð\'p¤*>C@DPE@²Z[ð‡(ó·C’¼°* }ÿð`6 ™À e¼šBJ—¥Ý1ð5ð[à#‰À|³(Í[:@0ð‰„?pQaPPIbð^à` L‚|Ù$žÂ”a B / Aj°ë¦…°šjÊÓðð·}@lÀ…\àdÀàÎy0k0Z J0>pu7 ?`]b@… ™`‰°”tr@¼º*õ}âŽ`P@DˆÈ–™˜4¹âf0„—° Ÿ ¡ @…9 }°æ­•.@ŒL÷fU0*Ãå?G_p 㢺­æÙ´nP šà dÿ >[»êk4jñ颿5Þf`L ïA ³6÷ ?[…àö2{Pï[P$ŠG`F Iÿš€ Ëp²À ‡ëœàˆl4 ´ é±°³¶tæ  (®Uqô9]€ \Y Çp Æ@ »ø±p¤ ¸tSˆð¦ÌÃ<QðN°ÿ#x P ƒÐYÆ® Ž  ¤à ¶À Ì6íÇP Â0· ³"áDFì㉚x )ªÀ‚‹0Ì`cŽ<þp)K6ùd”SVy…\xf˜bŽ9Æb€Ñe–UB±Ä©6¸øG 0êXDO&ñã *˜øÇ ©¸b TDÙd’EéC=þ¡Daž˜R)ãŸ$Ž0Â$”pbŠ,¾(cÂ<üäEDJ.ÁQ”_‘…‚dyER:±ÄCAéFFÉeiå‘ÿ7ÊÒÒˆ#’h"ŠK$iäAþèÃB áˆPgvù$¨Hbˆ|øA#˜"‹0Ð@N? Kûèã3û„“OB å“N2Q(B¹4F@‚&šaT!M &Šâ‡‚(B Cé:äˆc;ú(ä‘Kþ©ä=ÐÀb‰ vÀá†x‰'® 8îàã?ø¸ã 3Àࢋ0ÒˆCAaä‘GY‘AþÐÃŽ¸ä¨cA¡$Žþp£‹'ˆèá]vø¡ˆ;äh 2Àˆï âÌ8à 1¸ b !t †`˜áŒx"‹1ÚÀc¹E!ä2šÈÁp8 ÿ3äØA19ÜH£Œ0¾ˆ 1Ê8ã 2¾¸Â‰"x°!†^Á†PƒŒ.®¢ %´,¢"†â‡l¡…N8^¨¡‡#¢èB;‰¤“çN™„£i 1䀵_Ø0ã‹,¦xb $Œø›"„‚fxaL8!…fÐaˆ0°€" !h§îXP!ñFá>\°á‡$ª@ Åf¾ùšRè@Ânˆ@Q¤>ê`ƒŒ-¦X‚r¨A†\`a…Ä™`"Á>˜€3à´#øÀ0P Øp`Ð@ÿ7Д@1ÈÁš3ЕHÅ/¶ñ}¨CœèÃÁ$ b$ã¬èÄ#Q‡4xa IdÀ‚àyÀà;¨~`(xÁõ”P%üÀ/@Á>Ðzpè@ô¦wÈ@H¼†:â`E/þAŒXHBqè'„¡}Ôã¿HE%A3d¡ CÈA TP€ñ‰Ì`8¨6¢`Ì€&  ˆÉÝ­€.[ rà",a [ ê .E4"Yý¹Aõ@‡R@cÿ`†-D @ÀA UH‚ѧDèIo%Ø XÿЂÄ€8à’,,R3@Ü L€‚¼`Ü‚`÷7.-á `ú‚„ä—‡èAbIð"Ä#«0E'"±45t! GèA ^ (Žws3™†@xA Mº@& ÁmüË&ÝŠà„+| g+ƒ\&Ÿ2¤Á sÀC°¦µ=ÈÁ X8\À‘&¡rŠXÄ!‡6Œ! Oˆà fÀ3Ð@BX¸ ™™a aÐÐ9D‹p$ëžÐ7üá˜#±‡n}ËzÀ"ÒÄ0F`eiC¸3¼A_üòІ+< AàAnP²ÿ , hЃ"*±‰K<~‹ƒÅj*((¡A ŠÀ-¼#ÈH6Áˆ@øÁ¦„H„#6Ö‰^ýŠ˜˜Ä¤"f«[É ~ÐCÞ€†0dA L0ÂàL5„$P?ÿØÅ?¤HB¶_$a…(4!K[:ByÞðX CËÈÅ(vy5C8"&¤P…œèD ;­â¢ð„&.A I@Âa‡„ò06”uSp‚ZǨ$Dá„(0 ñ a¨‚ÑC±ˆIlB_ØÂ¨ (8ÁGÒõÃ$ú»ˆ:€A ja‰P¬bº1Œa¢b ¼À-^¡ßQ|ÿb–!þp`Ó… X¨ŠŸÐ„ò€ÁŒÐ'"Á3€—#w(„$:ŠX|m«bóBþ17Àji˜‚R`‚üà }€(Z‘ a$£'ÕÀ5¤ñŒec¾ÐE-`APP$dR€(îÖp†­‚Al]p³ìà>¼a @p Z0„ØA›HE-~18Ì¥.qHÎ?Ñ–BÀ C°þ<4â¯àÅ1ža  <ÆÜÈF5¤á e#½À…,ZqŠH÷öàèpšYÏáÿ@„hq0 !6Â?àpM¨Ãh†R’‡•$l­qÅ)6‘ˆœþÃÆÿ˜8E-‚Á jhãâJ8"sí,Å£­ŠQè ‹(‰V>´„çâˆ*@ñˆ?Ðáx(%F‹^ #ÙðƒþˆBÔ¶9¢H,hñYüã*^‹`(CÙð†8ÈAŽ¢HÊ(0|Á ^ìBE~ÅA8Q H(ƒ •Íq&FHŸÌ,jÁTݬ¨…/Œ}n„#V‚ȹ#ü SƹØÅ.xÑ‹_ ΘÓÃñôq|cÕh1v! <‚¾>¯…,V‘'K„=[e¿9!¦vO:µÀ…. Ï _ÃÌÆ5¸Žq£Ã€ ÿ­m7ŠS¸b„éñ1”Ñ Åd£à`ø8ÀÁ k8£¹à¡#Ñ-ŽTb á„$”>Ø;zØWwÓž‰O”‚±¸Å.~!ûd0ÔÀ7Þppѵ·Æ„'J[Ø…Cù£¿mèeãle†Y(Jø4@è'H?hIp„BH59€ºp8°˜2„DxKà„QH…É_˜žð m@ÀÇè†l)šòƒýC=RHá#Œœ@Œh˜B³jˆ†e ^ˆR°Bxƒ*ø H1¨Ù’ƒ3ø‚x²ñ*6ˆ;àDAN€Áh¿”?ÿ",4ih1Qƒ8¸S„G¸-Q0UpYh¿÷+ ^°W M°¾}ú(È‚6„Jè„K07P¤y‚(˜+È/4pƒ‹ Dè‹KàPèÁVˆ…ZÈ…Âð1 [4+è‚1Pƒ|éA0„\z„H˜KÈ„N…RØÃX˜Z …Y€V0PÀ„HHAàƒ<àN…c€†eÀMÈ7{°#@&€‚*Ø‚08O¼šœc5‘„JÀ !T`XÆZ˜…Xh(¸/0ƒ6 › ‡­c¹ ñPPè/°ã¸Ø²©·àg˜ˆY 9(8Òò ÿ$p‚*à‚XœÃ}áÇá.Þ;ÁJàÅ%c‚*è3G›Û–8H1ð+Àrƒ;°»zF`?¹:ð¼„DP;Ž(:ƒ)@‚Ѐ%-ƒ5ÐLJØ:˜/à/¨%:¨ÃF`÷AI0P:ÐA¢2„=P*øh)ƒ7À?ÈšØ*.8Xšy©/ƒ•:°É‚…úÚ*© ‚$.8ƒ8À˜DÈÉdÚ‚"¨ˆh‚.Xƒ[ „¬ùƒ=8¡2ƒ?`„L˜ ×àX‚-pƒš²= 7@®-¨(`‚,yÀ ‚ü©`ðÄYœˆ5º¢0pƒ=@„J…TXQàˆø *€£KÑ ;€ƒ(ð‚5ЃEà„W †lø‡k B ‚@H‚éjŽ;ª78/¨'0 (œ§òŸ€( R2 !È!8¡3¨ƒB°„Tè…i(‡J ƒ87û‡Fh½’5Ð8P+Q¸…ëÚ‡wx†T„9¨ƒD0…_h J0„¼õê¿3W.;6Y·ª ÿ!ŸOŸgäÃ&»4Œÿ%is$Ó‰4>$óI7©„u˜pÃl–ÞvסvØ•GÞw¾W…Éó5 jæÞ{Ô¸#Ñ}õ¥¨bOÙé×byÉ㟌ôAc5Ãà‘Lí…""eé]Æ¡v"É]…äc„JçfeQÓÍ6棑r+véåBh™#Î75uSI2¡,sI2mPÓF0“$Ãã%Á g~áM’0sö·_2kúècœhH³5kHƒ5¡H³Œ”Ôf¥”E¦ÇáeRçKwKv·…Üyxä‡ÇTI˜9æˆÄå—¬n4Fh%ÿÕ–R6x9”†kl—úÞ{VÍäN7¶‘Ì$Åä gù5«g$ÁË_2j&cÇ2qšL&Ý̱MÝnJ7Ôdå¹Ã-hbeåƒ^ÇxƒUEâ6‡ –/a†ýê/54l–æfYŠ­&|P7cE]pd¥eT[l1—S¡=õÆ­9¼![_¬ÍAM|åœfc¥œî{ÍûÆ2k°¹ŒmÀ hýƒãš<'ó†4PcG7vP£DnÉÚE±%Ô{…ùko¿V: fÁ-ÓÃË8L"Ãб7\{ÁAlXf‹õ¨ØK“‰4†BMBo³F9 æ{Éÿ§pÂ`«—žÙ'9LS¸ž¶ƒ]4´–Iã9ðŠÛÇ#ÚM2›B‰žo„kp7ß(šLÌÆ’&š¥Â-X(©Û15§Ô”êJ4½W{Õc?,8Yb·9uñFÙ €VkÉÌÛôÑMÛ¼AÍÛVrÝXŠ©ÈË?× ”=¶4†Ô÷g6j˜Öì­ýu¾Uø)§I^ؾyÁ_vXÑ\,±BK“ ™…"e÷3ØKÖ¯öTfMj”XüwÀÞL PHrQ0œ4ŒcHP?œ¡ÓµÁk Çø€¤q Ø©ÌjÐYOuª÷7„toU)ýÄ=ÅÉ Ã#ƒŽjt.ò¡03ª”úÿ†ˆ¹ ­ï}‚ßæ¢ƒ˜±ØÎ¯(9>gs¸#SKüM4¨D¿Ãðí"&r‡Q%ŽÚÌÒ9Äø5b‰t{ö–±ƒcÑ1güÑò˜§ð@B<Ͳ“jÄ,B …Äš¦× éÇC¿FBüö7ä|Qw\„'î§?™ãQœô$ÊaÐfÒ¨ôPF¤óIÈSIªNææEËK½Ë•¼›íÈQK÷±ï‚w§D¶ÄEî6Û` ‰wZŽd×Â>chP J„4 ]Øu(Ûu(\öTTå]Ûàä`¡õ|—=»”%§P}kâN6"JFµÕò Àli2iì4:€" ;JÝ€§€XfJæWì5cÛ€cš!L¼ák¾Veo·.*ã086)TˆUcˆ×ãEXB …@¶ÿ0 H H@G?ÂTr‚W3C ЄķTdÄ'g% ‘ Ÿ× (‚$º³p¯HXÈ ¤×(È^¡R¸æ‚ÿ§9˜¡‡ Q?Õîð Ô–ˆ™§ÿP6d“ dp]FX]–89–“Oh|Ý„VõMà58@´cõc.EƒYðY5R-kÂ{!¦52bÊS.€€3¢” 8O¥t À°G/¥[ÔGuëÂSÉ@ÃS³c@¿±r·t2é1?kµ&i’NÜÂÉ#ïh"(|  ‚ÛБÀ‘ùyÒƒfXÞR ဒá@XøŠ@‚÷0“¬ð >ÿðvµb·Èï0!÷JƒàjðãEV² óöÛð °0é‘Ò^_FÊ’ ÿЂe&jâ‘y0"q½ø #6[Õ ØøEdBBgÉ` É6 S&¨Òp£3©´}†d'ú±#ï~:‚T¥x 0# t#&dò+Ó bs ÿðÔ1-†S¤‹Ò2Ô¸M()‚ª8 ®ÈŠìЊº0šð  °xšRI‚žÉ o ¨DJÜ7Yê³¢¡›L#&A©gRQb6¯ÅA•5*ãlÌ$$o3’­¸` Ù -¹  ^SµM2¹6¬ç"/>‡ÁÿV‘·@Éc¶ƒ^ì²5èBžéD3z)#û¸,á' l2 iâhËP4Œ7€ "ȶ&ŽF ii lå÷9H|#„+„ŸXTÙ.i é™|à™ƒ‚#h © ¨8 ÷ô–7ã) #.v@nhvЈ a`/á7º5Eæàr|wi$2ï1Pb“^™}Û¢¬È`ì` á@ã”yNU•áÇ öw!Ý)–®7$Ñ![VáñÒ) ×¥*æ¦íµT1ó2m7tÃ’ˆ³år#ö#6 'F4"3Û.dbbý"ž÷`+)ÝTÝ’J&C7‰ÿÂ<¨”+ùX8 ——(Eej׈"4Ôð ÑðzT –<àG<à§HÜÂdà’ l÷CZ¤‰Q¿ù5—YÒU³å~ḇ®Ä$c!)ÿ1h 9‹%i ÙµŒ*øK¤I!:<(µ>P’5ódH´¥ÖÁZ e#%ºõ 0‰FGnÉ B2WEó{Á·‰^öXÆê-#Ù‘¦‘(‹‚F’–éy•]Ù%]8TT5X„E…prÄ–§Ã/¢I—AÚ±²#H˜kòS—Óv>¶;ÉPZ¡‚¶:`ùºH`±V äA~OÑÒoÙñ‰“ðÿ¹ pI˜ðƒx- €&½á{x[Y”»ˆ>d¡\µ2#BgD—eb%Yr´ ÙŒ!’ó6Wð9CnB Tz C%]Cˆ°Ñõ,!Ù¨“«8¬®¸ìð° ƒV·òº ;à&Ç(4Ë`MEÃÒÝÀte4ŒR- ¢@:FeÔ‚'tAÚ±¢zòG;óI~É—Íb e#“àcŽä"»±‹¶ð›?I² 10œö(šUGm™`uEªøÖ—÷"žD(pb&Frcˆhw‚CeÒ0—†c65kû’2äÃDcñ˜DJˆÔ0o4!¸qÐ °›vcLÐ îÿÀOʨ°Èº “%gEUŠëy“š “«ùŠòšš¯ÛP(Æh•¨,ÊØùõ{C#Ëð{k¨Œñº|âäMËÇ^é(礅H5 j’ÐÈ}6ä ¤pÅ#-&Ó&4ƒ†jù?@J?‰ª»D !RªkØ&ƒ–¯ìБÎgbÆ%BÒbu[hpž¤o«G꘠rv‹U&Ê&[é"[i6#‡^œ¡x®ç;|˜kÕ:R-•ðÛp jË ®·®H¢š³ !x¯…’tÛ¤x’¡U~Ÿƒ* É<§Åâ@7š«–ÄB4?¸³d`¶Ë0Ò¯KØ][V^Þe^&ÿK¶%µsèXm`˜ÉPGgç,—ù—hB‰„ —™•†F`˜ÝÉà¢äpWyµÚã&£ñWEZR“,]"‹¡‚#iiÌàË(Ò¬ÈRJ¶;<>B-p™&y„TéÔzµ úòc`á?²•Ô™óoÞ q ŠQÅð‰9° b`˜7;• 9“%ÊŠ¬8 ºP錚n[¿tëYÅ ¾‡Ô,™äho/5oÝà~']Ue4EÒXTEhXéMb愉œÈ­ÖMY¥´Ëˆå-­æ-| u—•ŽØ3é¸3Ãã.)yã’ ârbâ°bá4»Ùʪ,²«Œ@')ÿ3iƒÒ|Ðn;Æs[ Q}OP&_KV]Øa5B<Ôi‹$$ó6oãBÊæ€;âYÖR `ñ3BòËP „¹3ÌeÛ € ]¥d‰’ÐÇ Ò0hî\·ŸwжLÆrœ r¾ $k Å GÍÁÒ(®ãÔ$„ÔÑ/˜V%ü÷¤ú’ ¹é9ð§¡÷J•ˆ•hVÁ2,yŽV§ã–Œl%ÊDÍü±ú„Ԁˬðöº¯u[’¸œœ a1sÖàÄ&†"'ÿluŒp³;( r#B âI,xÔúXª›Œ&ÅÀ<ää-u° ˆ;ÓŒè)#“ bÐ߸A]Y–¾ŒÖ˜eW92—à ¾uÀf x`…Ó4l÷Oò @×/ìæ¬œ0jt»‰uQfp ÀÓôµ§Pž’R[F±¸•bî‰òÜ„å¡iœ’† Û]3„ : b­T6âNE k…®k•fv²I}ä$3tVñdvÍ ?ÏdÅ› ]à4€QÒeNäÊÊ'€¬°mTÇ|_Kln#ÜÀÆÞBŽáH«‘Ë€pkð×­¿¬·~» —ÿW4Ö„m˜ ú,¸m’hiÆ;­…'|TQ^ç¸ v ï´Q6S3c¥:b#Õ•‘eEõ f ÈJ¾ 0 ѨäÅpŸŸ„#•a, ‚®ƒ¼çz®"Q½SéÒ”ËÀ >C ÒdMÎóµãË&•#2\–ÀÊa Ü£==¾E"ôSi ¦6 –@vž„ýQ}I³Åiˆ1Ó6z¼0« ÿô ¡×ö)BÊâfü»ŒÀ¦¶ ‡D—%]99Àñå5ö/Ñß„X^öMäÔMÖMŠË4á2ÎV|Äù/£¼‘nDÓœÉÉDšÏÚHÆÚ·Ô2Ëbi†˜­ÿbš^æ34:Ãzén6®ƒ$ºI%Ø6‡û-»€% æ“×½4Ýsi]³U¤ä%únrÜ‘°OsvÏ^7[Ýf9œžtQJ„ m´2”Ú0#3}èÆÌ9†í&¹$»É»›P¤©c3¦}:2†¹¤ê¥[åêdì8&kh³~ Ǻb›6Rñá”5BÉÁw î7äH³ÓM²KþX–ÉeòMrˆ ù¨ã†KQ9íë¢;æ”úíÉa žI_¿ÿÚo§£° IÓÆU_ñ)m¨´¤!K/*4hÃÊt¦ËIM¨’\²U—!}ƒ¼‰ÇÚPŒÒM¢ÕJÿ´Db’„.ÔP5RÑ? F-ò s€#Ar4È 2 r€Ã9VLXmÊjžg²<åÉ$ŸÝg2AÐõHX 5Þ@ rÈï%ì»væó[Ìg0TüÉ“~Sša¤í$l+—·Æu«¸¡«eµZ#Ë|5k4¥Ÿçºa‡e؉!ùˆ4>Ø™e­Už£—tD´¤Ô/%ŠœŸÛšuÆtER\+S]%« ¥}ÆZ¨šC7ŒÀ;?Jc„‰d^ž’ñ’‘ˆXLåj:T– *°k¢ÛÆ×Fºnl*Ž?¼ÔÛ ).IFr]oÄÔ"CFs˜0 Ûõ–³ê9(V¨y“t¾ÿ!*ésQßJ“´áI[Z%›V0§} |ŠØÁÆõȨE­†7ÖØ­mSu cÌN‰ÊÝä'Á€D®–¥,„ ã‚fY´c·,CiŸ›äÇ67¢«\ÁÜUmu)8Òo]ÛRò¤É'rAR¥ }Y»îFil#9¢Iñf¨¢ÅN'YÕ6NxÂ'NÁJ{ V¨À‰§F[†–&Ñ´ì-ƒZÂʲIELZø4ËBÝB 4ŒÓ ’©h•§$–Ío}ÒN©T·Á`ðÂtÅPØ[ÖAƒRž««ÖÕ0Ù±J¦dµ¨òŽòÃ=‰ .¾pÛ/sÕØÿ^F¯±¢ñÞæƒF ³mÚBIçšsH‘ÈSZ[š6V= AOÄA¨±i0* ,Ó6¸N®Á¶Ý˜Ãn{Û‰!AñNÊ7dÿ$ƒË˜˜µ>#’'·ŽËXC1†âeaiÔPBa†3½PzÐ…‰”Vº'>ðpJ ¢Q ÞnÃ䘄¤aA&?ë`±ì˜ÖºÏ ÃÏÇ…Ö7C§]=æ  93bסá@¸fÄÉV‚Gó*Ê–f¦væpœi“-d¦ÚR” Î)¡ª ǺñwMlý²Údu RŸòŨ[Vrpi<ŠÆ±½1±gl¹ìÖ2+f?I¯}èt‹rüÖϘ$t¡³ƒ(M¸ ŤÂ|O¢NšÃV"¬PÇ,¦²Nà· ¢†¼ªœµ&/íNþE¹ýú±ÿ¯È¹“·%ƒhâøÐo’Ñ=ù–-ma©?-þeQ©ˆ7ã¤2¡­]yG>é?‹Ô?n¤‹W$Ü»½Á)àЛΫƒÕâ˜Ô±–5Ø;Î 攆L0^ ‡yŽCúâyÑê—dŠBØ'&{ªu±…`ÈÀ·RmÓÌ)PÁœƒwë­CdP5D-…Ò”†>0DCüÖíÜ&’øŒ9¸²×1¢nèqЮOØ£ ¢™`TëxŸ—( ú C¤íYŽRê=ÿL‹#»x“¤ÓýÔ…7-`“-×*ˆPT]•k?5¹µC¼í4;j<ÎüÈÒ'šMxÑ©¤xƒhУ?€0‡Ÿ²³YÎ(>o+!=Ú.»ŠÛ¤¼Ô-sµ„7•ЍKÈÒœ 8EHy+Ä‹7TÁ'6¥ÍˆòŒÀ·l…ÒqRÕÊi0•”sª…´dè„a›1Ñ ¥£I¤~r•` …­ l OŒ0}:¼‘C+ϰµPÕ] #kЇ|7¡ôC‘-ÉdÀ}º¸axGÉ:ÙZ¹ÈrÀ,ÇÎç90ê†y([í—ãè6“ø i@‚aH-É(†ÿ+‰˜@Ú¤†Æ(Äxc…Eȧ°\uSD>XÞNP„4Hyë„´Å'²Uˆè îUˆ¨[¥ycmÔÀD„a§\)¨¬J¨5 ÂÕ¡/*‹¨*«„ŠÚ!L¿D¡à@j$ " $à”_|ý3|z.ºõÁ‚Y_Ji2Þ‘ Ø“†)ˆVé¶Ïí¼_ ÝFò–!yU6ñAÀÓ©ÛëJäù‡6„ÖŒœC<² £@  XÖ²߈hñŠa§²®‚”Úª-Müt­Ù2 ë¤dë¤ô¤ÝÊ©£¨£hjo‰£!§†*Âù¶¨2F:,®«¹®ˆú&íjSs\Ž ÂÍ åpw Å<Ãt僇\^>> BhUqŒd€„b¨2?œ梖†('ÿ›EÆ ÊЬƒfL&DJòÁq™‡=™÷‹$º{, ƶpBT‰^…¤SûÄS=MÌ=¥O¨h^z=Mˆâ;Kˆ†a„˜„vcx‰LpÛ×I2(šFù ®ðÓ„±•TMÞŒEˉ5£Ex‹E#˜¥·”3:+#Ø2»2lÍ8ù h±ÙL‚£Q-øšT43¨ƒ@ ôÁ‰ÃÄ›€Ä™O;ЈÂ©=b#†^YD×RˆЉb°}«uÂRº­/yl>û¦#"³™y2dõ£Ö©Qtæ uÒ$¶˜[áÖb@5…¼Dê âçýO©XQ]L=ÝØpˆm„\ ÿ³À•‰Ýé3x…ÞêƒÙû" YÁÄ ~¸ð.FYÍR•fbñQÝ­–´1ݺîOú¤­þ±f¾¬JìŒßÛí£´¬ÐžuEu>&Š®¤¼PØ4 PÅ|Þ¨3ƒyÓ­C’¥Ö†Š(|=e®ÒSëÑŸò¬Û5Ј„`ZjS9ÒÉqõN tÚ¯Ú•8+DÝŠº9H'ܘÆÈ¤Úr2y=,æë>Êæ&±ú3ã*DíòÕ#ú[.&©ÀU°Ç“”ÚŒ-¦¥nݤ­hžî4ÉÍ4“’æEéš:Ë䣪ƒ½#Rə܇¢¨gÿ0]<Çz;œñ:@/ÿ?r8¡Ò#UÓ£ßÈ¥ ¤ G‰‰R»“ÊPø ×"äRø‡]6M9Þ¨û­s½^ʬ¸ 1€ˆÇ^2P2dÖ6GžHZ»ú“6˜¸8ϤhèZ„滣¹}RYb’Ùú5•Yá@VÿÃèÜXÇ U”(À3ä ™%´Ë½†3AÁàr¹j܆?€aì†Bø0à8!JÏЊR ûÊÖNøx7u‡{J '.Kæ×Šâ7ðÝŠ°¥ ¡‘8†Ë“tB(3Ö_à+LÚªiÁ7fB¥±d ‚±8y1ˆ€†°ˆÕV„È ‹ÿ Â3 f ±š›bQç˜cÿ‰Í¥´ -Ë„`Ó(†bH¾|\ÚTôNƒ„Q4Ñ-ðNÀò„Çx‹HF…¢«²ˆ–„‰§KZ„«‹Ù{ꌌ\$ ¶î´uK¯Ø^|ò ²€´¸„ÙQ¹ÒjbzÍÒ³Ž:nï8²¤Ðf³I&^ˆ†r楎ú^ËÍRU“EóD:²,g¡ º3:Œß0¾„…!ç·SeÐó±ŠNŽÑ-€¼Oè4XµR ŒHiHy< à®3Öa˜C’(ðó\»É³‹Ùà²Âx’øshåîÉJó+šC€|€üCÙlE1è†ÿÝ<*–ŒQkŽÑ™Gª2p‡0D¥¢·ï‹N…?kq¨ãšÒ¶J<"¼Ó#U@¡™‘ÜxjMG#ÿ »ÆNY9} 1›XHjsW˜Ó@ ÄbÍᵋXáÒý¥ør#ÛÌtË!m 5» $(pN·ÒÌ[³m 9kÄÍéóª9iu’I††š™dv’…’öIÚJiÃFR“Ö²fªnæðìéó'РB‡-Êsž-£J—2mêô)Ô¨RÎkš,5jݤQc9l’8VìtÁ›ÅŽU¶N/F¼˜PÚÕaÿ’ KæË µÉÌ,˱—šA¾zúÍÿø`Þ¿ b¼¦Ûš:kBåhl.g·nJ¨…¢¶2T²6W“]Š•ë²ÌæÈ}›êÚ(¯ª¯gÓ®mû6îÛ§·Ö}i[©±÷t©›U8KÛa¸0Ç?€MR£ar™u4Åh Ón#še6ºc'o#ì×w”„Úji¤uãÌ5šjræt²&ç.wmóð x ‚S HTW R“‰KÛ˜¥K<³Äˆ8Ê!äC2†ÑðOxÜy×]1ãiÇÅìÐÝ0+îP ôQÌÔ&Ziupe“iW5˜ S¼¼$‘Ey$’QÑ'XbY4‰4ì…7ˆË°7cŒm,Sã$Ãøÿ`£ŒuÉ ]¥Ö#]ÉÀ×2I€”›qÊ9'ʦÔ9Ô·Í0Qó‡4¼¨´#„55h5ÃÀ•hƒ;ÖW‘±Õ9)¥•Zjà‚Ašó~ m“¨™)à—šz*ª©æ–)QI›«ªÊ:+­µÞöOP¸B%¤­½úú+°· ©+ÿ°,²É*»,³Í:û,´Ñ&x§´ÕZ{­œÔ6u,¶Ýzû­PÜÕéjßè.ºéb+®k 5ûí¤.½õΪ-nô¤oè €9Ôs®½l¤¶ô½æ.Oì € CLç°CO©JPøü1ÈD± @£[uÓÃ8ÿܰ¿`< ;Ð` <ÐІoÐð‰m@»iE5!}tO#ûÔÍi *Ú4P)¯¬rËÓ1ÍmÄœƒÎ]’Ã%)ùðÉØ«¹L4†Þg(Òmë±RLSsLWgúÈU2T³¬¯ÕG\±Ìi€mÆ×“ŒíÃ%kÝØ69ôa÷h]-ЍÂ@)í6æ¦Âý”¡hž99\i§3Å4\¢úÍf|¢ºÒ€½†ì-G¦˜É“f]£Õ%9¢Z uyæÅ+;4ðÉû]Ãã¼óÉ< 0χ]‡êÐû=™ÓKÏ}ôu‘¹{2ÇŒz2Ë8z²ñí»IükúðK6íÿxhÝgöW÷Ãøòýô¸W=ð°€Lù®‚¾Ð Cm R üÜ'A#¥ÌFɘÃED²6H#öë\þô¹ºìwÒ ø¶gÀFÏ„û;Ÿi–¡¦%Õ‡}K)Õsx£K—Æ%ÀÔ%4øB4~¹„H´›¨É4Ò8úFÓ¿)Šî„ÿó^UH@RÑn‹:†újRCsü*›Ó!›‰²Ñy“è^—&Q 4|¥;ÁPˆ– êi“‰Ýp×Bç …†Ü¢ !ç£&Þ+™áÔk"˜Fg)M?–„äSÜÅÆ7ºqzhèáW‚A6ñ‡“0Ié¥ÅH#X¡[Óÿ¤!CæñÎ.ÍcáÿćBæ.MŠ¡³ÂŸÚk’GëÔÀöÓ2}ò?Tå0Ȧl²šÒ£c}˜ K$ãJ¡iQ“ñ†´ñÈPøÉŠEhÈ*〺l§ ãéË3•Lû)ãm$iÌIq6ò{WÀ>µö)%1¢c$ÆDGiÒñ“q¬f)“qJ4f/ÉXÃ7K‚†K@4t#5¶Î_Ò’y‰|ç.YE25ÑPZ Ç0µOSÙ°]Aù—Ä€fƒ¬!m0HH“Éi”¦$¢æ‡ÈFlã“¥¢I$ÚM“è‘ $aI7ìð©:Š>ë,IR_æ®.*L)KÅÿ/P­†¡I¼ô/ðG™SéçLq#®®Ô0“=™šÃô1}ɬ°4¨ƒë|j†åxÕ­™q9^ŸaÐî¨Ýi*xBYJ0µáŸØciV$šÑºç; ²JŽ6t#ËÌкAÎ06°‰Q«I¹ç#­då~²llHyû¨Ø¾ô¥°}Ô6r²@ì*¯D’eÓN£¾¡Hí¯ËlÆ®v3áfŠËA'çƒSX¤žrkk7¾qU(¡©,â¦hNÙÙøV”¢AŒÑ¤Ÿ÷Ø¡ @èY0ƃžÀu?n#Wè&Û^Å|‡ò%›è#ÒûQN˜¿mÔÜ”‡áôá­>©x麡 sÿa9‚x‚S¡Ó¹¸Y£,CUwoT¬ßRG†˜l`b‘œÂ—NkÔ‚Ýj;¼¡@E±)#`´a@¢o¤’-wÆœ¡†86µ”…Æu,¨Ì± ×'m‘£p ÛŠ·¹É°&IžsäH: (FÎà h> ¡>!aQØFüÔ™WÜ(-v±Txƒ·’9.×ÅGƒÓ…muZûZØ>Q‹€q9(ëòF#ÃÉ©U¤æ‡ª,åORT4¡8FK@cûí:ÝD7bU Õ¨y+ûÑÊkñ³ µŠÕ;b`ó˜÷B_š©¢WÑr•KCÑSb@ÿ}ØF¯©‘Še·t–ƒt¤A8ó­©Á½£"<Å µOÃîk<Ã^â¤Q½•†ï„¹3_÷·¨—î§ — ýZò\ÃÄ44áco´2/#l?¯½Ÿ›wÛ.\LÜ[c;9ÉFéý.>Óf¹yÊLƒuØFG;˜™eg¼¶?Áë¥\¥+^ì\Vú’Æ|DÚ 0¢‰¥¹£"©ôçi±€¶œ6#…•—’cBðÌ2”À#; ã³¥1ßgK6L$õ‡­sÛßgÕš®T;ˆº9ܧ÷N>µÊ–ðÅfKƒÄ9ä´ãû‡!ô('ÚíÜÉ‚“¥ä·Wð½%/áM4êüÊ_ö¥‡ÿ¼üÒO¨Èä5°­ÉØÖ[²¶›¦%¡ªøœˆM\›GÇ  ù¨w”驦¬æ×xû6rä6r¯C[ m'BŸ]¤ò>}þŠùMy£39{Ñha"ÉøÄŸ`,õJÛßÞ—'æ›îNï'0}F¯š§[Ó ·ÀPWàö½J sÐßæÞ”0“dAœÒ‚~¹QÖ7Ý×ðÙH0TÙ9T59Ï'u’ÉaÙeÛ1”„Ãhu ³•™°˜´dŠóiRRÁîdS‹ÔÑ(Y‚4€4LÂ2xþ´Ô­T!)øaž÷è’ÅŸZ›~øð,Ï;µÓ/µ›ØÕÿGSTÜÀz}ØÀ|„káA§Ä‚~ˆ§È it‡TAïýP Š\ð1àb™¤‹P”B¤¡­ß+9P Úð< ·<0L vR'=”í…‰¬e–CQé1Û¤©Z©ÔôÜ`ÖR:ý’K…Ê PÓUÑî¼Ð5ÍKµFPlJšKf¤B2dF¢u…h`ßfô—,ƒ—YFù…Ä6@Ä\¹XR&,ƒ”M *u‰4=ÔʘŒRÞ¡RCÒ\T”°D4Ê‚µªYQàᯛŠñ„-h–ïÑ$„R0Bî4‹œ”ÐNJŒVý¬oÙ0Å…øP÷ð›Óõÿ’þD#äDb¼èàý"e"H=PO°F7| ¨ìQ—Á1”5ì€.öÅE%ƒBTŸ5ÎE,ÇEˆƒFˆÃ£ÐU&DƒQ…Æ%‘¬EÓ8öf=U2Ì‘‰ÆHZÕ'Y„BÔAV­#~Œb‚åO;)5ÒÊ€¨B7ô‰+¡#ï‰c1 Öô¡œAFU—(„B„Ž h°É9m…"¡š ”Ác PÁ\ÔP4˜C.]¿AÝ[ñDÀ¼Vj×}ÉÈTõ C Ãy„‡_ÄŽ_ÐŽDФ4`ÐClƒÌ"bfdõÊšéÇš %QéWEYÖ/Ú‘IJàÖ×^xÿáËÁ‰CPƒkÅÂ6Èeœ‰Ñ\n °¼Ã4ÆFf±g€YÃÕÁŸíQ cÅ?ÛØ!IÅ—KÄ…htÅè…òU¤¬I"àí}£/|#‘Rí©2˜PÔßa”È`t‰Õ¦H»{˜$ÞyãÁŠ#Xƒ£ÉYPôaÔƒ& {uTéùÓØR;öu;EO#¢t_G+ئå:Å#n5’paCffìZWä³+å3ý ñÿÉ5ôe‡ìb5ÆAtB)„Àw)ÌwSŠÒD´\·qôP'å ŠÎ>ÊO,¨ÅÅËŽŒÄU|†4há^ÝhžÖIÈ+Ûbäcf ²j¨pJKôFaTR4Jöæ¡r/¢íXÇQ…†ö*x=ݵ •ß0K·.%Ý:Q¯¡,AvC0WâÜB΢Ë(vÃ'œÿKÀÔGèýß–õß®ñ€~ƒ”$ƒ‰¨`~B'l|w‚8”‚++,®|³‚5ʉ¸øÏ~K4Ô!¡ù%*û”Ýq9YfI­®Ý1¨w`Päž*ßÑèafõÍAq„\íš+á2¬fîeV*—†%|ÅTAE’„]6hˆBryž¤èºÂ_”Vg\Ov2gflŒÑ~Ô¹À‹H?ÖYõ¸±ÔÖ÷NÁ2œB7¤ç«Å,5`ŸÀ'ýHÉ0 JÚ0¤ ƒ#äi•c9û–ª…ÌÂâÞC—;{ f¯ŠOX^"Ò¸nÅã™§¹o}5üƒ;ÌÓÔÐ\æ3×Y®•DU}ªÿ‡¬÷¾æ¹]$½ÛÎ`¶_~쇮DŸ@è8b&ÒqŠF%D7ÅÚ7ñrRt´–8|©ëvØœíXÕîíþÏê­«áû–+lù,ÿÃ?(W7äs¢¤éUÍHC,˜|,$ÃÌŸÔ9zØiŠHÏK”4D‚4(û¢*ã6{Y\H=°´³ÓB)ð¥$…0ë`¶CÏÜznç)Ã.ƒú±Ù<@Wò¬;{ô¥xˆ_¢žæQ`Ö`.D¿@FªaÎâ}dzûíÇ“õ‰8®6U&žRhù=ýÐÏhÁ'pØkØXIº&×Ði´[/¿ŸÆ‰0ÑÎÿÙ:ÆRŠvÖɇ‘}xدu- XÉ% A”Ø´–õÍkTeG2¼;$û[U$FÐKC²GC|ÂYÄ+Ôƒ…Å,ÜC ÔC'¸ó+Àeã7”9 3nuÅHÎü+C,,CÄ©äüâUÍ'~¢½¼&C~¾­tªEôëÒ{h‡ð?ò‡hØ6J®Hé­BêgDdv’½‘ª›nTº1†&™`h‚í6©b°aÁÜu3×­µ E’£ö±›´Ô¤QKÆfK‘*UФóåË–;]JKöè¿y@}þ¤6̧ËP“-]ú&Y¦e@¤ÕÙÖgÿ›*j©Ä•gi['qÂnKÖ’´´iç¨-Û)Úœm¥Â±Rg7Ð=VõfÅ›OW¼'®ø¸Lü4vürdÉ“)OfÜxcfÁ’ KÆyØÆÏ¢9ƒúXçÏ?/ »”ìÀ%¹sı2+m4ÉÄ$£‘“—Nœ¿wøNffÙo1ÔrH3C îdÍsïÎM½›mÚUÿôìÝeø—ÃX†üøM65 ÉÚÛ1ÌÒ°6®ÙsÚTÚ§ƒÔ¦,KÕ- ׆"˜ùÐ&’‡Ä#ŠZkm;Zƒ½d4‡œ0‰¤•TZ&¥£|**™er’&5¡<û.™Ô¼;í˜dZcMÆÿdŠ{ÂL¢Úæ”°jóKYرk–Úîò«6v¼²pJ‘¦”¹¾’†¬9¢kŽº|ìK—m>çqú؆2Éà²ÊÔ\“ÍÊB3 NÕ8K­4Íì,-_BÚÄnþ»¤VØ2±¶ÛfŽdv3Cš’ñ‰—Ô<‹sºã¤ù­:Ü.Å­G}Øl4ºê*›ÖÖf‡I]34n¬6Éà‘m·ýÇš>ÍE£r*7ÎïDJ©³›B¢5 b¥ ¤òÿÍïR‡¬¶¡W»êqóÌ—è U餓öeé”_Õ˜¨Ù$‚”V ¤ðc)²%{š\ê&šò²¥&jŠ3Pun£Ûk4À ½f=™†;2¤­—üƒß)Aì`ŸÂË\»4uQDqŒ[Ü0hðéhŠ^^é„’º’3VH.{aÅÀÃ]h`/dE6¼B‘AB#àó Úƒ6¸±À7BV»Û=‘M¹sÌÓ~B"¡ (ß‘y@"Eo, ÎJÁ¾IkÈõœ³8G7u"i踙—ÙIˆšYͨv'žðì$oà4¶1,UäâèŽÿ_rŒ˜pÈËXŸÚ6Œ÷h>º*VkB«PD#Ô°™ÍxÑo$¤)Éh’!„‚P£X±Õ°Aù¬H„bÆôˆøŒgˆ’’ ‡¤¤z!*I…*Å ÔD£TÚá’ÑI #ÔˆÀ6D÷jd3”ä8ÑšœEsN†dŽ‘Ixr"òt‹%Ò¨Iˆº%Ï£˜OP™Ï2÷5 3ÂIÓÓ”4´5$h(»£÷º‡2‡–j °ÌQÑ”ÅIRª!Õ©`úDCÑh±&Ñšùœ´)Ã` °:òŽŒ}ÃKúü„­XdH±HÑlÒª?‰Ñ¼4ÿ5RG9ÎB’¢‘§ T.dáC2fMU‰=šº„4^&—à¨FÅ*Ö$ŽñšMp¤Vy‚4²i.¦ê%“‘â9éú˜t‚dØ:åyÄÑ‘ûíÉ7™'·Âã>œ€«KA¢ü¢/¾P×±ÔoÌàïñ" Eܤ4ÚÇñøQ&" ¬94«GΊï4[ä¨L@ªb¹’Vn%Ç7È᎗ê$Žˆ·j%StC ݰš`YŒÕ ‚’8hã•(‰Nª£‹’ÊÒ–§Z—Jˆ"jnРÔÜ4®R¯‰V>B¬ŇêêÌŒàUÀ³.Å*k`î6¬‰zŠç'Ig]ù[Îÿ5™D~ÚZ‰{‚E¢åï2J­’ñ Ń`w™‹ZuB_£qÞKÆ?êhZr5mS/²ø´òlCÝÓ#¨Pkà-.ø~4U5”ðwË#ùä–@Ra !6ã5Þ࿤bJ7N‹X¼Â‡¹(©˜“+¦–+–hFu•uêRS¡(&´A2äö¿d$°·HÉfÈp8U² •l¼¨âÔ¦£X´‚I0 ®Ó4Æ¿ü=g +3Û …¤%Ñ8Õ׈" õ’˜³êF7 ÉýØ«™ì ‹Â|™ ^Ê­qÓü œÞqZ‡ÆIàRÍÍC#ŽÄ|ÜÉS“wdÿ+ȇîÆ@2 %¤2L±šAxŒ4`˜ÌÉáR£‰–$ J‡C‚á2£¥&§Q³¡[eçÂa@AÞ3–q£ }5'Ëp¤40çù¢A’nhÜ 3¨®ÍÝõ}ŠuF‹ÇŠ/™«  N™Ù¢o'$jOê0¬¥øpóy/ÜÅ y«M$ìp…¦5å¨2[È’¢âiV4Œq q+ÛlGŠC¤ÅcøV#/ùíQ5d7Ä¡¡nL¡·è-¤áÊâ@„— ¡²–²,I¢ƒö ØÁ‡œÍb‚²:+²mÕhn¹²GOF±Am# ˧*ÖzZ3Ë€?­âÿê2º4ò0‰op")Þ5©¹¤~8ùó~ nN[ü×¼n‹õw¶’7kæ>I] >Ìâ—ð…â:ÑS°»nÉså¯YIV"˜DßI‡M]w0ޤåÑð$ÊóÂtíÇ6Ìðw²ò5Áîƒpg+Ün™ÑHŒ+N Åðöo Aa²t¢.CRG)ôR²Â/1Œ‡“+Pzq·Ü°T‘©aƒšmƒ¸x BŽ”8ߢñw…%âm|AmDî04Ö&Y$7Ìàj)–¢á>Â#¸%ãcΉ1H†lalá2М+Dÿ‹×~Í"Ä%t¤8 äâ£=$΃⠈|,é!º¡hèRAÖÖ'‹Tã®;‚£ŠtöðÉxëÍ'žp¢ (B"œºaºáÎŒ=Ša.! `#bATAV” "B("FHq`PnäFa¶Ê  QêB˜çû@'ô%†r†º¬mÚ€¸-ô–Áò)„`Þ@¸¨ Œ "Ê ¶AzÖ  Û<"¯x"r¢Xê Ä"ZÃ",n# °Y¦€t… Ž!B¨C7â…V")­”¨18°à6ðˆ%#Ö„$"òè†^Ä‚%’g¬l¤’ÿ8è"àMAÔæ-î Ual^axºQðRőܯþŽöRb‹‹'ä UF®oÞéX¢~„¥¥á?Ñf¨‹È ¨AÈ¡EQ-f ›ŽÂ¶j-®*,¢Á¹²//ú‰Ão²‹^Úb¤ Ê­ †aØ‚ýÈÎ8ÅQ2¥-´ƒ^@˜´ã”R¢öNI æƒB"BA0σ:#Î̪ÁLH¼æ%;*B!”þm'ƒ o2láç!xÒé)Û來 ÝzŒnv£Ú˜‹‰… ’Zà ¨qY"dYÖFÎöNCbJl΃$ŒG°ò†%¥áP0)ŽP'^,(Æ…TÿvÇ€â5 ®Á*D ^£¶á ¶Á¶a¤M5-˜Ç¹¤k¾Tè`²áú²«²a‡ m`¼O/à¡GÚÂ*ì@’–caì BŠm Ç Žx#$uƒ¨Dq;‚F;äB%îòŠlÚB)xÏÎ.BÞƒmšå]fÅùŠEnx¦*…XºAÍRá#Db#‘rM2ð$›Æ.kÉqê…ôJÄá¶cBGFŠZTçmrsrÖÀòêFZ²ŠBŠECŒœpÚæ/ONåNm½@#ÎÖë;ÈXŒ†ätaPô…™þb‚¤±úÂ^’‰ÎB˜t…aÒ‚bÿÚš²"®Onq«>B ²ÂOÆúÎ ¤ÌfÉšCGáÈ6E1;²lP’6¨ìÇXŠ mô=.©éã5¢Xú" *t䆡က¬">a ŠHc̶ÜM¸Sж³1³iÖãÞ*K,Š_¤ ,Œ€¹²¡¢B‰ úäŽSuaï8èA©åA'q^² XVDì²Ïì²3"ˆ5@C3€ˆî&UÞDÃ5òÎ5¯jt -sr†B†K6§rC“$š,šØ­OåSï2ãÞ€~ èÈkCB)æÚOú';»L9¤áD2h’ëo“*QrÄÁ²aHÿ•=qjßBQAÌíÏ ¥LJ5ñ4!¨AvÀUcÀ1t±LÍ”2cëÊ[NU(äk…8T/âÁ+äb= Cê–dDBí@R'“j¤/áUòj„Ju“Fhå5<ƒèÍò.Õ]Ò+]èî@D¨„Àëq¶N¡®/¬.Nñes‹s,C©$Uã㇂AR×¥ Ö r€´BÀô&à<&†*jëÐbnh€¦9*ÑgŠ6É®£¤G7q³L’Y§GèT$ìà\iZtP“*ï5²&khå×ðÔ?º¡§’(dŽ]µó2)Ïõ‰Ö1%Baâ’¦#,”¤^ÿgAK ‡NÉÈëã° (NAÄ n,HXÞ È¬‹üL'iEÆp)l!¬¤–&nF‚ vÕvuY¾ÌRLÒ`>vHžLP”)%uY!`!HØ!ÊjaD RB’ºÁ*€›¶a}þƒžFd/ç4P-3ªHi…Ui{f ¤Ãg´ƒº(ñPäËú@7OÁ´…+ÙôF_à jÑ‚>anî Èæ‰Ð4màðÔõvÐ@böb‚ Öl` ê \á^’„^èT;ö1°Fj7HQ@ÚC'¿V'„E¦”¨AÍtj$¨á[3×["HW.øE€!Ô¾Œ„L¨²È`yŽ›ÿ03„I,Jª±ë–ÉÁzÄ+~"ä¦X²[e—J=–¾D‰­¶búìQȃgS&Ò†!Ö6¢²‚U©v4S„U ”ŠQl3ê g¼´Q¤x;Nzb”*®#ã·>Ú@vOƒ%xe¶Î‰}Ï·ð¾l'ô,v4 ràæ@IhIN,`Ž¿a´ÄaJ½p)*(sB XBXÆxx¦ˆ¢¦%ÞéŽÁ*!‚B¤ê"S,H¡s³LS°«ª¶,šeËêŽa¼fؼàÅAäcN ȽèCWâÇÉÚ`ºw·*ÀHN5¶T¨á¸zÃQå—+¬²Âv ìi|¢ïÌŒþ¡H–„PX˜ºKËÈPéì G°»+äVrp|GæM'Acò¦EQŠS¬$Px‹TB²*ë7䦄–%éÎN„œF—!éœ" 袂×Z0'p;dÔÂÏMè#8¦¾ÁÈ! Š/ž1dLÿͿ̻BÄÎ :J¶lÚX¨Á¼ÕÞ/þŒïÇ "x¬Dòã‡O#d¤å­ÝøŽçÍmTç=Rç@¨L”ÙÍu"ð­Š‚ùRnôË–e,…Üâ‚"tr«FPu3*¸åkbFhë¼\³ Æ"æÃË ’¤3jÉ3ÖƒFÄ8®Ö|Ì—ÖûÝcüý1:%fâ&>‚•æaJoì¤aùJÛRŒ¹G§çPžW˜®ó-—ÛÐôà ¨%ï09‚pëS›û®?Û`± *ºab;JÚ›o°¡b=L/•àAí]Õ+DŸÛÕ%z\ <^èEFÍ'¼ø´&ä§C„á]3@}Ìü›¨¢#y­%y“Ö”Öñ wJL?BÒJÄAÔ%Ñ” ¶n w«.² ª™jx·þñ¦ŠÌ×ÿƒpX`'ÖÇ%€@·²†FLÄÄhbògœy!Ö‡ñvCÀ¾!Œ êW´%°š¼?m6GR¨¾Â”—ó-‡YÚXƒ´ër32D wIAŽÛ/¨”ûî5tÅ ºw*ÔÚ ö€\Évb®>¼¦°pž®p&ÎqøY _ñ“_ù!cµöµq 4r ‹Ðçß $xæŽá7…²”J ,1hÞ¨ó51Sè…$ÞyE7…‰ÊŒ`~Ba*êCò¾¼=ú²kh1Ÿ¶¸x°ð 1․JËY5çT3ÛrlóñU'UÝÀr»æë¶9ÛŒ¬÷ ¢4 ÃÚ$Û‘ìRÝa—’ÕIJZ¨c KË$íµAäܱ| ùà<[‘+[¾Œ9óÈ)»IK&Xšnu¤ÍŠ(Þ,škî¡:,§ÑÙÁx¶ô¶î¤¯ ø”V@gW±ÁwN]Ó†ØW»nKëãTZ#ÒÛ~ZCÎNö¹ÉìÚ l°`¾ygŠšŠš9qšÛKæì>¾üùô5GõL-Z¦îÒêЄ§‹jêð!ÎkÈU•–ok$ÿµÔ?¸)…[NÁ™‘LɼfákÊiuUZ•S—huU%æðIU("—^Ô4 š4BÓWMÙ5Ì1çQ#Í)Ý0ô {õ¥ÄËJC‰d’J‚d݈'D2hPES=³À3Ë€Ùt¢t:%ã[2ÿ(š…bHÓ…øTáo=Y˜&plöäC…ÒˆñF#^¢§Ÿôy‰I4š¡)‘Ì2~Eåd7ä8ôã’!)i¥–^j|ñè¤`ÉDùÚjº`‰¥:sH–W¯Õ¹Æ?[ñ4g2bÀŠ­°’±LOdÀjÆ2kÖJÃ0SÒ° Ëì@ £…BM*ÉX4E7tíD]ÿôC˜"4¦Û~ n¸#ÙhD •Ì®—°ˆ:ê¢Î,[RåÚp­ZH¡®É0 ÃØÐᅩ†ÀƼëR&cÃÂ<$ó†ŒÑØ!ºQ#.HÝfÌqÇ?†n~ˆNBM)â¼/<¥„ÃLJVøOOµÚŒ Å ,°¿<ÌÃ,°tí„ÅSDJw³õ%ÔǼ¼óqÔRO}QÒt³LÛtrOj«ÕTJWlZˆÆ?80ÚhÜ,l1>¼C0pÓF0@Ð= ]vÁÔ¢Bõõ™4â>Muᆹ ñøÉ6¬°«Ú6a["e®éþ£pÁj÷ ŒÈÝs0dÿ÷$¤£]FÙeT_F}Æ)¦“)Žxí¶Oí-G0€E¬ˆSÊU 7¼+/Jóm^{“·@ßt S×ÒèÂîÔô’Nv{öÚoÒîmðXkÔL’ØsÏÿµÓÞ‘‚ ä(D7 È‹«I#bž E4–! AÐjœzÖÕ$r$JùoƒÌ^îDòNÄZ#\†E3šÐTç5S xÒàfˆç4 pB‹È#Ÿ gF"¸¯Žôr øgGÿw©Î]N!šT€À¼€ÈAžðè…×rÉAnYќ֧9—gþ9e2“ Ñ¼¦AÙ 0˜Œ°Z€Q´Ê ¡X¨IdÁ'ÙT§\¥O ¸Ö/‚ùç9C ´–t—YXj[ãYxš!kÈÄ\;ÑN¸Ã o`wµ±B°«„ÕÌW"ê.Q@3w Í]ÕšHÃÞÉ<•kÅBÍ0 Kü£ÖhU'¾a†˜±Ï~öla_‹’Ã^´‚ñ›_ÓÔ™ÎhŽ”­nUh\…ƒXÐ O±°D(ÖàŽ5„B¯ †%Üщ¤5…zM Ya‹ÿÝÌHp~³Yl2$›Vk^6©ì¤Af‰`ÞxÖURý‡%F‘ZÒŠÖ¥m^ôºa,°<Òˆl³[Ìcn £´ánPfÍ· e0q‡Ü„B ¶0ƒsÝa jDÂsèr›K¦¥ø‚LF‰Ÿ~A 'iÄ›v$‹’Ky$Ö(IÁï1wb¥ à©1C/{šUäàMí¬‰\⢕ïh¿â¾-zÜ}u·Úb| x$¹_2¢Ac÷­ÄRÆÍ0ò¤ Ç‚¯s¥ªÌa\KÀ™k€s^wƒç(CÅÀ¯;D:òâ,3—'=@7ò!”¤|¦ÊÜõ…™ñlæQÿ$ù½©¥ï|­ñèLç97dj £­+,#ä¿‚N#©=¹Î‚ Š}`^tmË éXã&·ñ­5iGCzÄœ†Š§=m5QÛ±ÔmAŽÂ’(ÛØï´¥âŽCÛ×6³­}ô~#ÿÛÔænXí÷ç’”æ‡{9I¾Î¥ÆES¢ÄÁIüƒdûý Ⱦ€½äl:½¯íïms:)µ]¬Õ¶ÁØR{Æå:rŒ¾Ä‘PT2H–”KPcÝß+Š—ç'p£¼]îF9Òíë“ïùÄO'¸;î™’©ï½ƒAöI™B¤#õ/J–¡—Kþÿ8í‡âìÀý(ñÆï䉞y‘÷ûß58hšÂ)Fê1V=÷Êù÷Y^ðI™Ä0&! ½`Ÿ)Š—ý„{sP#~‹–FýÒ>e2ŸÖø¦7¿ß÷“3(òd~!2K#:?\·\ȵu©ÿTÿ¤L§À€zfÆzˆ‡z4F Á (c² b7 x C‘ fAD‘×7ó—”'kë÷h6fW|Pq?Up'!zû—åFâàÙRVqN»ôKª7}@ ‘zà @ÁF˜c$ÓJ8 @6‡sCO Hm#hmÕF‚(˜~Ô†_ÝuËg1(ƒñ‘Kuí HÒ K÷ôP”µ=rx×P}t˜bгu¨·„×°„c’ Ÿ°{øÇ{c'cgˆA9–#æ{FrL'wztò÷ )è$ùu3X†ß}:h @‰ô#÷¤²§xL1 Ýpÿ$S+ˆG„LÓW×' ·ÑŸ{Ö($C2§u Åð ßàxÁöx]kÙæv™G‰ÿæt‰BpßÍ÷‰,}¬d•J»4M»¤Ž"Kß ˆ(ˆ¿h‡„XcÏ0 Å0 × €eÃu x`°ç‡ö8ì6&Ô@{̲ »' Ç@vT ¨Œ’g‰½–k$ÈŒ}S~ø‘ùçÖxÖ˜ÑTUí´Kí”'€ H¡H¡à°÷$‡~ÀH„Ô`}‘@‹úU|5{°—z&ùz“`ë6 ¡de ö,<¢v)ˆù š—m˜—…#&ÑFS!Yé|/T©PÑX‘ÿДJ×´K õN u\Ï€Šdx{üø±h‡‡ç ðzÕ—zÒ E1 c’}J–»‡–™` 8d'ŒH œm‹6 *y\¸vZHo³Ñ(‡vBÊ7˜ñ  z‘±Q°™!A†T÷$"±™M µN»…T'õTÀ x\Ö("é(9¹ ¤µ„ÒÐ’F8 ˆ’5f„É` ªÈ°÷ ²‡î`s—“Ô â§s¤@RA8V`¹˜“N"Ñée‚rQ#D á)LÀKq†þu¡ê‰JÈ™Ž5ŸXYP”¥NJuR`xdxàD–ÿ ­BS1˜ Ñ ˆH{Ò ŽF‡x`4â 8´—a Š–Ûð ‚Øß ÿð Š4蒘ܵÖ‰#Wr÷aBÅZäÛ@˜)tháùlW#– ZŠä óÉð‰^„p_EAü”ƒYšáµKk#uRoE¿ÅRÊ5WÊ¥W¥à÷w ‘ Ëy Ý@s»i}ا‡ÙÇ]œ~K&{8ÙÝ œPè|Ð ©` ŽWC¢ÕjŸ‰(‡…™è$KYA1ŠŒœ2V‰*ÔJñy?BÕN¿hŸ8=0z]C5P^“¥Tí”P›¥Y©Z©ÕaMö |0ÿvúÅœ‘ÝPމB{A!v´j—^‡–_§d‡ˆ«ÍVŽÂX{ªZ@àŸÿà޲£Ûi?ûõ…|†œvÌ:7ÉÐsƒYAðF?Ú ‚ùÙ:vÊêß Œp˜Mo¸ž‰³3öŠ6;Mh…šPº`&5¥ µf™aÇe‘p\ЕWеZÝê“AÄ©ŠÅÙ˜Ö‹}±ŠM’x]WœË äÀ,o`¡ Áµ'µKµß@pÙ:ž¯J`ù¬¯æ˜C!G]ÑV¢ Hc>g~‰UŠCQŠ”“²jkðkPhÿ$lŸ©S º²+—?öù©•…T1Cª£0dA6ÿd‘ð ­rdðd\k ä0?ŠõuÚ9˜§` åÈ,´§Š¹º·f‚–dç—²:vvÀT(IPäÕQ9 ™„hÝ ±ú·4fÔCvøñn¥XŒ¸ ùÀ­†ùiŽ8@) z ˆhcg ‚X v°M0ñl 1lùÔw4ûs%–X"•`n¥¯T*\ÄU¡`¶ \r&„Ïe ÝÀ»Oò¬ìcw÷Cp¡€œÌé°“` 7Y$3PAx‡¼q ÉŠm•J+0ŸÚ[!` ¡¸Rž'$¼Jë4{~8䲆Ÿ&³‹ö$4¹n_z Ôp æ¿ÍÇÇÿž&@ËzÆw°F±TúÉTše^4@µ®‚C¶Äê^Öpióõ \ P†_-›_ü•Š´Aq{êøûv<‚ˆÿˆw—PùHX'…iÀ,‚¸1d€F_D&iJfÁO¦ªLgrQöǬ ¸Q–Šw«ÔPˆhq4ˆ— ”f— ç)ÑÃèÙÂĉ©ˆÎfx€X—³‘F¡(·‘zî,t·Áò\=†— ˜X,ú,Z°D{r›£d¯eHûHÀ4¢Vœ‚]˜m“ ·k\f0gm Ø‰Ì øi®Ê)ˆÔËâÇ#&[ ɶFáFQŠÑ°MÔÈÍI*Ž‚Hø¡ÑÖe„ Ì>K?·xŽxòÜoó\c:]Ê«³h«¨Ê¾ÛÙÐ 6Çl°mi'Æ7U;’dÿ$ÿ°ó`Ðíq‘'UÏ&Ð>Çgœf‚%ÈYxBÙ$xBc÷  –)ìu@1&Ñ€ÍÏ¢6làL˜$~Û@q ˆ—{?™»hc?ëL}¬G}óLƒÇu/K±FA‚ˆwb"Њ8¢©v§[8’CÿðÙƒl±ÀœÍf Õ¦ÚV‚q×~Ã'Û,z‚g`§°Û¡µe³qÒÒ€wWÔ4ŸKbÁ§ŽJ&%MÒ‰Õ µ%äç0É; Ø­mŽ„‡„E-A6“г9[~ô7ËÿÚV}GY¥÷O'UMáºxfç­ÔŲbÊÛæ ÿÀ€mŽÌÅW=òÊ_ülÍ`q‰h~uý¢÷¤×Jö­ˆq]——íe€èu’Mc©·€#~\gâè« Ž–‚òÄÛu4æ²ÇAV$2'Õdsð ¦dg.^f…É`ùÍvÁ§–§t³}‚'p®†¸Lvެ_í@câÀ)» â`K)ÿG ìPT¾î(u“( ÝõØGè›mÎæl>xÀ0xv±›KÈ›§e}Šçx³ñ¾U&ã.Dã—aËë$kžÂ‚A"Êlˆ&¼¿&äQf”¡ìß± ´íÚRle×Â¥ølx7vdá ;&¶­Ú©7Nš±ÿ™?ª¬‰µ{O²{Í ˆ¡Ð—ˆ¨«é|—ìc—uyâ{¸‡íisiˆ·«ÔP6†ØáÒx|/Þk è•!s!˜‚«H“´jå‰>ЈÉÚŒÙq yy”ÛÈ<jê2š¬´ÛW³†‚ËÊÜma;p—áJ—´óΟWï?¢å aÅ€¼ ê¦()±†ùÝmNk×Ôf*,‹f¦î芇'¦yœñ&­&ÊáÞCÕÇöO Çë"îiï˜(òÈ’p[Ž÷­öâ.kÑý~•¨¾ Õ,®§Š˜Îó¬˜C¶'jáFN-^M ª¬Ú´£ÿУDomhòàÈm dh)ÿ±vi$îñŠ âO)™ÇðŽ}Áµ.òÏi j¶g¹±´5¢gNmîØWc{xË Ý±¡Ôð=¸'ð½'o Ûp‡o—'øµ tõ·XÈÙ@øfÍîôÜ]÷щ Ó!J *SùÝÉÛ`½©àÈZîëa¡¯°dÙ 7Yœ|q’fúæ…W÷=Á0ð‡¦u{yÁrZÑø«Õ¾EQr Òjß1ÔÕS9Ú¾´uÐsõ9²‡Î‹’JHˆ>n¹e\e¼ÖÐ+¿…é7¹¶m4ºå‡)‰o‡é¼‰‘?• šH²D^ Æ'¼Ä^ý¡Ô@Ž…¸¼»·¡µgÿb‡sAŽœ9jæþI£vé_²d“þK6ìߤe“®MjHmXD‡vm£Âˆ“¨%[–l!5‡§º}úWIš´'©å³93ذ`}T(€yCEšTéR¦Hÿ(4êÓAˆ(ícOž\‡M’Ö¬ 1šíh²M²Kä¤1D8læÛÉzÞæ‹çÞ}óòìW0O»>{2äZø.\iݨQëFnðä½zûöÉP³æ™Ý¤mëvt`äÈÛ”æ®[²nªª^Ê](jdÜ]by»ÛwŸº™éMŽ·ïn‘·}3÷i™% W/‹D RC­„?nœôµ:X†—Øÿ£èMrjm¾]ZvÉq²Ï¨ÏDìÓ—Ý¥O›ÞÇŸ?ÿÓ¨L h€«þÙh˜Ž Ä®#`dЬkôÎ!„`J†šebï± bh£Å> Œ/»Bœ¬0ˆCQ³ºàb­±|Hü‹²Å6ëÆclú§8`êsŠ;ͱƒÞZhµšËñ›P²Æ¡K¬iã &ÿù„šNþÙ†K°Ô’KÒ"ËÇ1˜R=…†©h¢†üŠM5»Æ»6†¤„Z&ÊÇ2©Iš ©ñ3L7 ¦)ûôC4Qýž:€PíæÉ*AŒLf3ª F+’Ac˜HØ·6Ò;©¢nÐ3ÃÿÔN:f&›âëi>G”‘°\kUL1]“™ï°ºnl ²n* f'_’͋ك9†Fi]ͳ FóÌXw’9æ˜mÚv™Of£&“vÞX&“Û¨±dÝv}ëÄ>ºi×¥xû 'ÞRú,2r»ä¼òVE5;°25ÓÁKhK4›Ä𡤿“oª ˜6jÄ”šm:~¯ãÍî;TQ“Oê©G…¨ðtäRÉ@‡ÐH&íÒ(SŽäf“àlO‹XS¨±%EdÏ4KÑÃÀpíu0Ë`ÄkFnY\¦±”­Œ'`¦Á0“göjb-GjáGÏކ줕TJƘ¨±æÿ2™²f2oK‹ÿfËãÖøç”o®<Å>þɺ›vþý&‚޾³§3=â餌|zpÍ6XZÉÎ(O!'J‚¨É¡0£™Ú™ð+ eÛQæÅŽoº EÉåŽÍóï I‹¥a©HÔêÆª«KÒ“¸¡‹C)`;[š!Ù=?Ñ0¦£Žšê®vµ.¹8„Ìœe•uÙ±ýª‘3ö*ìTœlSPͱlc-ÜKÂW–‰Û,c<&™DßEH¸£»q`7âõÀvÍA‚æxàöHcŽ<ÆvH9.Q Šª"Ô©Ë[Ør’bŒ=mØKÈó r¸¤ æHE7ó¶m¨cúÿ©Ý턘Ÿy Á‚FøF*Ðá§dP*x(qvnH3—I (ø„%ÈQ ˜Ã;O‚b70ìD‚SùŠF€Á†|c-O2•ÓcÎr©†=üŠ]qø¥ÂdDƒPÞ[Lÿ°ƒÇ7Ž‘˜ò䡱²4r|c4ÿú‘9& {öD…Ò`‡V¢ÁŽŽ¹#K»Ûj*T¡Þ°€“0$ hŠØ7bÐM»(è ®Áäpi'`úR}¹Å‡ï)ŽgÌÄD/b“ !K>ç°ç¸0%æd ” ‡žL\ì%½ …bq˜£?¨g¤¡(e2Ó«@™‡+,!™–ÂÔ4Ç<Uá c¯ÆTÅ•OQÂCX3&kðɘ}êX4²;Ñ“F™ŠÓªöFÇã„•]NÃUÒ¤8ÛP%9†¹“…ì±®H«‰t˜Ša&M£Z£B,1ÉI’Â+Ü?æÿ`-uÂ6‹ÆmG‰ÁÝn)±ÍINö÷×L”GxéùÇ9 t'”й¤;rqçP¼$¹¡0Ã?v€€H¥1óAÛuõ«Cä…+XÁŽN5_í9^1›åP£ŨÉ6“gŸÀÌa©jƒ4Â#1ꉫ.—oBÁÁâ,#£ðŒ•m´¢Ñ*D¬‘'dqŠSÈl{…[N'™vød[oÙVÅÈ¥ wü(r*Œ‹Þ‚†‘Rd$ ;Lâw¬]îˆD7bÚDpÈrU:?¤Í/C~j ï$fÀóT$!l!KÝÌdŸ †jju<Š7 ² ÿL(<bÏ»Ìw¨—³è†Y³‘¯yüÈïxŒBhEÏr~s³ë1šÑ³ ùF!Šck'¾1‡B$ÄðœŸaïY HD‚ ±l»!$ÍÇ`Ñ÷ºb"D•„$GA˜D7‰I²9Šõ<ªŸÌhïlOzd$-IÂÕö’ÿˆFl“½%K,΋º96óÔn´žÔ¯¸mÜ UH"=HÖŽ´¤Ñú¨ÝÀЭtWÅç5ïœMf Z¬×ÞÓ<ë47¶ªó$cµ !Þ5='K3­†!dËß WÜÞùf\s…b±;` ðW¬õ‡¾hT[…‡!Û=2Ÿ ‘ÿ:{Í©EFíL3ù³¢ìþõwC·-WåU3£ž6‡ c"КÔ0Ãч  "Y¥ôz©Kù€¢3$V-£íÐÂ)ObU+ÔÌs’!möÄzqL*j °9ÿù@P •óÊYÞ&›G½ã±ÞYcÏ¥pG´9k¾F©z 1IÞ:‡\}!l95–´ %ýC £ Á?làFÀ?`0G±Þvɦ\«ñ›öŠ^î¢lmT¢nѬXn#â$C¨Á‰«s¡¦’ö8 éƒ9øjÈ#%¯Ñ[4j—G:†e¢­”¶´l/[ÒÓw6øT/ãÕwc¼ÿ²Îåqr#;Ñ„_59»ÚŠïÎ]ÿy?P‹%*^÷ÝñË>è"³`‡õâƒi·R TÇÂ(A‘R[†Câ¡ÖãÛC ÛÓ´Oá´ÍBÏ1y¼¢)—Ä¡†Sø‡yñ+ Ñ´²‘É ‰fØ’Àù‡fÃ>ñBï™Bö(Åó>Ü(qÓÇ£›ˆÀ )rx?F”;5d »“Æ¥H/>ø¿ÿV Àx ¥á˜R޼jܨ”XšK ?ù‘ƨ¹µù@ ˆ; ¨ {L ÒˆµÙGbr cÉ)ÏØxš 3š‰X)¬·ˆB5ŸXb ¬ž„Xªb°-Ô 3!ÜŒº@^ ‘õ~êŨ:L¤œRÇPˆŒ¼!Ÿx‹hy(ŽÈPÄjÿÜj´I£˜‡:˜v(…lœqà Ê—w ¦Ò ö6äDcô“š,µqDœ¿ùã2¤»Dùû Çx,~9;z¼oˉˆ‘, §±ºŠ–ãK‘,j´U¡’eø¥ÈñD`üž…ôHÊp#‘‘[‘–º˜ ̇:?dˆ… ÀÊ,iŒa²¿œ4ÃÊ,™4¤L^>8…@¸³ôÉm°-üèquD¢†b D­¥‘†™³ªhœÌ»û§ŒÚº '…œŸžÐ£ëØ ‘³üˆ‰±KxIåŒb\†580 r qÙ†mب嫑Yd#a\_ÿøšîlŸ÷I!L½12Aµ£@wP!iÛˆ‘¹œ‚<‰Ð°ÉûûÀÉw Ì5€¸„R8{c/²’ tèЈE‚ Ì1¿ex+ø#Ç„?Û¬L¯*Ž0Ajˆ–@2¿Å„“ãD Ù‰)ˆˆO†O£eˆk8W ˜?ŒÃJ"Ÿ©ñÎîäEïY‘«£6(Ë©#¡›ZÊA¦Å‘àâiœ¿ø‡¨x·Û ÌÌI^Øø„5‡RðÉ0݆¦+Žw¬#ÚH…Ы˜Ð“À˜›’ŽAv0|´I„¢@ÏÍH¹è8ˆ„In‘‹½ Nhi–LÿY⼎²à‰2R!ܘlñÇ 0<½XœEôÎeiöÕ§aH’ëM¸ –õ w@p@ ÐøŒ¹TùшÙS9ý{*‡ÓˆŠy¼Š¼MœìO°z”6(€/Ê0• Ú‚Õ´ê†f 7$9´?¬ÖaJD,Õ¿ñе‰ÊC†ŽëšˆVe¬«BMÑå hŽèñ6¹ñ¶•àIù9¬íŒ‘¾l#ñ”ðFå[½¤)ŽI›j¡ÖB:Îj9€•۹NJw8¥¸ªX7ÃH€*øÐR›ÔL@€xƒ50ÖRèƒ5°ùtŒP8“`O† »²ÿÜ7\»Ó`}3ûÉ–ˆb.‹6í°ˆ0¸_ì¯J1Zs²0×…YŠHs"0‘‹’¤‘|êK»›OŸð Õ˰Œ^©'¬kÏ~¬XƒR(±š(¼š ¶`d“!‡šã * HiF„ÊMýù—VœU4Ë"X;XƒM L@‡PXYµa˜Ã¥³é˜Ç$KÊ,Cé†?ñCxµ†_zŒhX‰oóC%­¥*‚ñˆÔEO¹„¯H†‰Š9EÈñ5…U½4êQ}%Ÿ±‘­È‰mp0Ë)¨ÎJ†z0Tá• KÁ›²ÏûH€Á“Õx«ÉÍj|‡‚R"¬">jÿØ¥ÌFÙ¡P ‡P؆Mø†?ÙÐ×XŠBŽa û¹ÔAÆRÍš»{€!‡Ó¨'öŒËÐË“o(®Lp‹ÓfDM!s‡QÍ<§“ÐŽQÚ°H–³¤"Mùæ*¢ÊܦqœN3µÛË6Ò]Qõ•!ôÅóŒ²nÕÉ6IôÜ*¡ø* øM†v ‹o‰UMwH…Ø ‡7`‰oXƒPPYK ÑÔh#¨YÆÙ£P¦«ˆŠs›»€ª 0ÞFKQ«S¾(ÿ»‰¥xUí_b:ع`Rý©‰oP…äj†XÀ\ƒP r`‡Ý1‡{(®Í! e”ã4™+Õ=8a :Á"Ø¡eø¶f`~ɽ›ðäË0ÎMåÑ~ –I^ȵ ºŽ¹…êšB&‘´Ìª­ºŽ9¤DÔÏ«òÔˆ<•8†ÕP+%yERÜeh’g $phe!Ím܆RÄùèûÀÏ{DÔCŽë|ÊbQ[dŠb0 y>håS {h;б„0‡6è4ènhw¨ƒ/ñ—q,n.ÇK9!Gø¦ëЊ`¸”a‹’`ˆd¤ÒÈÔ‘>’ëëƒxp@ë+tø„&¹¿±t: S¡Ü qÀYP¯YVÃüóî}UO}pŠÁ&Ú³³–ûK(1–Ô Ôo†þŸv‡âšmÜÿh :ø±*‰Ô©—|qÔé ÓÙŠY 爖€ãñ¦LñíP<î .OLJ·$Ú _›ø~Úªý•Y£Œñ\‘XЬ †î¾u­É^´àdˆw¨‰a‡œZÙU †?± ô@ƒfªø&žøž‰NÐh>ØÆm¼³{hC4÷hþî¤xky†ë]‘Á‰±·öêís >žf çR‰h`мÙk虀‰’,ßip6Ð0zá’-éÑ«#y8 >©Hjªî™L‘%…ñœHpKƳ¥495 Yã"$›¸¥ÛÌïhqu_õ³vÁÈb áµ£„ÿº£rïE{š&§Òȵ¬Èt›±†?qÖw†fø„%ÒòKög˜c˜„f€¡Ÿ‘†bng…ld…{¨ú©Ÿ…½Só34/öÁu#ßç§!¹3â¾Çµ 0MýaS‹ˆõ®qQÉB÷(Z—‚—ØnÔ¨£&À[†SK᪮Ç0ÖUÎLÙ”nÊ“q*Õ†˜2 ~öeˆõÐA‚ CŸÆÐq ÌöÚ6‚ÍØ`I ‘ H€$ÁÖŸâø{r+d,1nYÇÖ°mjXÓPH†Þ‰{s2 ‰)4øýß?!âI>¡üÌ3ß;oJZ(…­×?e’$?÷Êð³&É7ÿѱL•ÉÈŸR{»’†Eú„<¶çK®èÛ$‹¡´MªkФØbM~Ùh¶£Xc7 Y€ óo˜´aÔ’ Kvp٥ɖ%H­áÃOÿ¤Q;õïX·:ÿ¬m‹õ¯5jÿ¨IëšÁ”IK&s&M™¾’é3'OœÃr&ë†c²‚(Qn š$S¥Ý–u™rd·¨U£þ#QW‡Ý"&³f±›5sB¿ez—ÉZ&p—¬Mzv©Ù¤fkŒM2v©Ø¤eǨMйMÚ`váØ©c(žºxºßc^<>®øü y3çΞ?ƒ :³æ`?ú4lõ0_§M»ÿVýúõNE‹®,Êe7wß¶1JíoÊbŸÜ}ZÄÝ¥e“ÌõÝa54Ì©YBN-’»NØ»w[>{§näÉe?4eUräÚ‘¬D®ù$ÀÉ'Äb2K_¥]BMr—t3 Cß´‘Ì%æø‰9§sœ*ݼòYWQ#ÔQDÅDSB¡Ö0: ƒšL¦ICŽp)¤PJë©Ä›p E£!a)÷ÏIW¹cŽŠî(d ƒË´aNÔ¨â#5•|“`€-ƒF3hƒ^U:‡å$Ã\“4mˆ#8¬ˆ£Ndޱ£Ë=fÎrÏ,Љó&¤‰V§wvFÚl²ñ¹§Ÿ}ª–ÌMßÈÿ$Í<(IsÒ6&¹GÎ;quPLGý5 ½…Æ?oM²)\ž¶±é7–üÓɨÿ|rj'æDRi7ü“ 9¥ÄjÎ23ªÔ |UDM&›ö0€]3‰‚„,EÉ6‡)Cÿ,ì'Ý„J`CmXóÍ?Jæ“¡êÕ”P5[SLB}…¨B-Q³’pïB$M·Ò,Ó­B:®tFÛòê¦Ö Î$ß\òÎ7Ô^s \×ÌU$|5Ó9‡€H‰¹8áˆÃN<á¬yšm¶N<³Äó‰+¥ˆƒž/ÃÁôÐPéo‹“rÅ¡¹34Ïm‘bDÎQÖ!8`æL;‡9V5í[]Rwd}hHÓ}ÈÕ6Ÿl£1Ë7Ææ=ð¸¹<;¥°ÃJôŸ¬Ñ†tÆœýËïœÖ3 Àܬø´õD:A sþD‡–ŽŠÔ@“CNªà§œþƒm§ø¿Eª%ß´*U¤ŠÆ7`E@R™j ¥:U4nsB¹è(Ô G7~¥†ü¥SÿÇpŽC„,°°d#rˆ5Bq’o˜pŸƧ€Q HC[B‘×U–’ª+R§cц4´”Üê lK:ô¡™ CGHôJdR”¼~Ô@Iꀎ·ÂúÃ7JAŽlˆ£xþ)žÞÔiµa†Ó"Þ'Â(ŽSˆ#އÇ=@f&æÁƒ%sÅÈщSÌ 9Àžö )Òð gã ߟj”#þ俏àÜŠ”¡H|£Î!TB’æD„£/Ï„sÜAI¸ãHOóxÊÓJ´…Ílesewxºd4° ¨Ë8ô è÷¹”‚¾"“¯pIh·R5RaŽ …ÂG¥œÿwÄÕŽacíØÒ$ÄAAŒ +CÀéÆ7«Áw¡‹(>Ž—è7“ÍÄrJ´å;gÒ@2ä+ÅxËàê@Ž>ã$F–QV„¹D‡çÐ>lãÛè„·1Æ&dmrE<¤—ƒ7|4m˜“!K*šwhæO­Q) B.—æ„o29ßÉq°bd烋érÍ$‰ü˜§þ5ÀV ©„•©Z s*99â-½DÄ ðêQ°¢ê+"%± ¯žÙ©alã¬ÁJ$„åÓ„$1Å0G>€C×oƒ®fǼ5V~%DI' UËÙD‰ãšªmÿ\:D–„Pá‘ò9Gi¨£L†1 Fc2vl6ŽpmCÛHƆ†£xÛÙ6ô²Œ¥b © hØÀ¤ºjlÆÒF2¶¥éÚ›+ºÁ±0–çHB Ð$`2 ÓÁÓ' ¢†Ô´†éæÀÞ!Ïw¶ ž€Glެ‡–†:’PаÛç6„y‰Ph’ÇÔ%I¢EÁ¥m>×¹Ä6ïC H #)åò“ ÞÉ$@YÁîsg¦CBI.!X¨ɯ{ãå j,W.Ž$"\*†—˜ ”™ìMÉcÌÇÖ„ŒJ/Ž,s…8ˆWiX¢½8Ví$ŠwQÂdCc½THhðÿ€¤»]²fx±™=9r‘!úm Râ-³Ly%L)¾CK¼ãß0VA’ÖÕ´aÌ$¤ˆ5ü÷ š JÍ™#©ºC!º¤ù0Gĺ V—€õ6úZ¿Ìq&#›ÆYßzŸ „?É`سèÖhPpÏ$YŠLôeþ$-®::ˆiRj•ãC©–‰å‚úÆ´c'ƒL›Ì2Ê$oyù,bØ1‰’±PÇØF‰+%).•F46·<›L.©“5“šï·:óSž)HÁõ¡×”9L4&Z@ó©‘è4¶¿7]!¡¡l¬ì#es“3ׄ&qÑU¦;0zÿ­*&Ã0&‹,'”‡¸§*í0K(È »í…¹ËƒsÍ‹%:o\ZÈÀlŽ:œ‘œWŒÒ¸RGä9!u¢O“jÓ¤ºf‘¹Ëis¢‡Ô‡@Ÿ ‡+3k]¤)MkšLÈð²ÆÄ¸eâ(J—Š Fà Œ†Lýì @@2„€`xÕÌ<¦½Ûj`Ã>ãp½¹MDìÛÿd±g¿XÀ»ƒyZk‘CØN商OÊt—‹BÍ-¥„¨*ÉIB(è™üÔ$W¡ 9øeB­zõÑù´Aìˆø9oŸoHо±¨œ¤Ó^:‰Žb¹kdœ%¦aIªe×Õ $ÿæ³Ysù& F¯Å‹¡Œš(ctæÝñèñm4Šrcq³DÀˆ„lâÀu%„ øºö¹¿€¯—ÝìL®3¾Û¾í@#tÎ_ŒkqMk²Ry|2`ÞOÛ>?Í|ÛÒòåqº¸C*Pƒ¤ DhEªÅ„ÁõPŠÀGPP99œ€CÀE1DBuб(BPˆ ¹1]HU”D¢-]NT^ú%EN4àm0þD0ÄÜTŸÀE”XC$8ÀX IOϡ̛ Ìc´‰Ñ%Ÿ™$aÄQ‡¸Ô=Ý$ìD€÷mØirßf„Ÿø/paá×Là_ÿùiU©P@EI¼5tÌ]fñ9`˜ÐE¨†Êýl̆kxK‘Hc±š— 9XC*ôJ¢<žüðÆ?ôRåͧY5ÌKC A°ôE$<ƒ m"E°ÛVeCÐÅ?à%î‹uP¢4QO%ÃùÈ¡ Ä/AÀ0ÀÕ¨ \\ŠnÃ?µƒ.ŸÏå+hÑ!ßd@Ff©Ö`@]‰ÌBØ€A÷U€jF’yJ› ڥLP¾ÝƇb œçSDJsLË›¨I=ÄC6°ýüÉŸOø‚ò 0ì_ÿ b"í”a¹´è —;È„ŠEÿ8\9,Š{ ¢ÚôPU Ð2X‚5´ÁƵݸ×u\>%Ø7$G'89x“VèH‡@ä0(ÓªÌÄÒ%ÄcÁU‡ŒÈ.Š’5Rôàˆ%ü±‘‰ô̘èš(£dä‘ñ9Of%†± Ä–ÌF‰¸Ãà,È\#ö%YUHž ”8nFMXŽ:‚H=¥F‰8§…ÎeHIÔàlÃÝÐá£ÖhרÌCJtÛ©\þÙ[÷(æ:’LPXžÝŠž½]X¥žäMi‹°IJç¡ UPãaJ°…¦0X-ƒ U… éHT ÊE|E¥|Û;,ƒ5LQœÏÅÿbÑD0LB±ð"`ÀÅùÞ´@ˆ@iŒôЂSrÔ,¸äóøüÕQõZbüD]b›.¢DãY„@}g7˜Ð]æÃ2 åy’c¾T¾Ý‘eýL PÌ6ˆbbÀŸ}͹‰M€ÌÆýýIÿíLA"ú‘—KÝ’ŒðH`±ºˆ vƒ9 c¡LÎmL&8õ’˜ ¶<$N2‰ÇÊÛQƒYLPVˆœKšFG(Î7DKàTÄ¥0Dă0Á)EB¢Pa_„âD„Ü{õü½‘SˆíDAÏ'Hƒô4aO¹íŽNC,¶dB7œÂ7¸‚à F<MÔIÿžç8rF´ ¢°È=å[æld›’Žæ|’¤Ê2À‘†Ìa¤V)˜C6P˜½þ§†™ŸJÝj´§oÜ%9ìY‰þƒ;äUßC•ß[ aD¤þÃ)< ‘uÃE,ƒ^¹Ç¨‘U7 ¯P8 Ãž êˆç7”D³0ĉ°P}ôâvXƒAàD°Í´¤„?­Q@±Ã´hÌ)°CJ´A¬FÀŽ˜X2JL CçÏ2ÄÕDÀ^u ÊýƒøÊe6BPCh„cšÖ‰-lÆ’¥z¨‹ÎˆŒHJUžUÅÄíPô¥É$Ô«¼YxÀÎw\‚½¤¶ùÎ4’9.$ÿ¿y FÆD½Õƽ5V…ž×0–¨‘ìá0D–…Y(‰Ž 5À{ Ë…ü¥Š§;ü9ùG¦ÂùÊmEyèÍFá`‡€X ÈÙᜑ4(iƒœ‘8èáÌ5¤½ˆÙ¥à%\}Ô &ØBesÌA;@HªØÁ2LË íPYzF»ºkhØØåY†äÃÁƒøD=¼b^Û#ÕSý°Í¦áêhvJI˜ƒ<˜ƒ8²X&ºôJ7¼C7|C*D‘xîÔ%.ÁÀÎÿðX¤8ÌAR.)ðîp|-Ó£V¥Ä{M ÈiÌ´N0êÜ&]ìZ,ÉÝ&8$hoªAÄëAÎ9Ä>ýÃ0ÒÊ6ˆmäu Aì›K¥-µzUä0&\z“ãhäKD\–—a1Ę<#‹QØ„Á¼såŒã²øtnúæ;„»´Çùýáब„·Èn(øÊ35ŠYüÃn0[;Èäɥ͚h(tåDðÿèJîå‘aôoæ'±dLT„lƒµi^Iï5ÇŽÒH.$ÌMÜ„ÀeçiDj œÆ„–f;ÀOŠ F¾î/g éû¾+žäUÿ]mڷ실¸Z¨¥+D¤¢”D?½XcäÇÔˆ%ì$„™5âÞ €Zìæ› ÓÄBX9¬#b«!h=õPV,âHTÞ¶œhlrÅ· 5”Ð;Hƒ5¼:TÂ¥ CDŒ—½J78é6ôÜ ;Ä‘d„ôtLr¾ÑZ¤ôúlÇ8(Ä$ø²(ˆ4<ÓbÓ0üR_\çaœº†ï­\ıhãa¢'„onÆYбÀëˤˆÈ —U©ÚmäÄ Þ†k¬ÚJkŒbÇ̱jèë©9¨ /2ÆžB–otƒ@ ¨ÃþŸçÛFÚ”Ž¸Ç…´ÃADÃL ÿD8ä2ØëNÜ`K0}C`GGlÃŒ‰EÑÂS¾I+3¥*;çÃø¬wàdMŒ ‘R/ÈHŠÙ«qE´TÅjŠìdO»\Í„‚i)Î±Åæ«zÊ„fhó6‹F7ãÉÂq,ÜéRùTø¶šNØ^¡`2|B2tL5Çp‡ 3O Ì$¨a0(pZÇå@×Û¼-9tÍPYmž‹Ü‹P¼æ7|C;¨lv½lß°O& ƒ&s/}0Ì¥¨$5”‡ñ¼‘t‚V+‡4Š)†+ëQ¬}‚+‡\P « mâÀÃi/`ð%¸߀ÃP¬6Wà*F|CO.ólÃÕ2ÏD_àÜÿ5ƒ·Ž¤¸âÉQŽ9ÒD3õg8µ4Ê{“ɅNB˜sâ"Ì­ÔÌùÂÝÆ„UºòG_ŒL?‡(Éb9ÒZ·õbn.;Z" …9èÌ$ä ráíKkUE—šhÚ C4½8ühh6Ç'€Sm'lC‘BOÏBœÌÚê‘‚7¥Gë\{Q‹<g'ö L÷h_pè@l¾Õ%.ZLO¯Ú1ƒˆï쇞öÝ`†álBÜDR÷™Þ 9ÍÑÈßÄÄkOQæ˜Na9šA3í 8,C˜ÄCÇpÌ`X-]¤vârÊåäĈô!#(m¸išž‘CÏ $ch1èDÒœjÿ½P¿˜Ä]ž„5HC‰:XÊ%\ƒ%ÐE±ÐÅ¥Ð(a°¤ñ$eð‰Ã¬Ö›xÌ KFñì ÌÐ.î7(Lp&C3(1 "KHV,¦ ,bk#'0üR¤Õö§¯Zˆeí/žZiŠ%E Rθ9Æøg·g\ÈP\ >4Ø7úœwËQ Xú‰ ¹hÅ_ô x4ËC?ðÍq>rBLJ†DBˆœxp„Fh^Q°÷èDŦœL,L¤lo\ˆ9,Š Dª¸hªHLÄTÉ•HI`lbQPË$8Ê(#vÔ¬Id¼ Eá°8h´Î±p É(à7l‘@ÿ%Iï|á†Q­‹8.Žø0ðN~ì¯ÉÄî$Q‚h žL&,õ«k„Y·—!„é ÇáÔA¼Ãm@Xüø2ÿRu ƒr†Î\ÜÎá^Š)âüå\,X@î¾æÙ9= ežñOÅäU…¡EîüĤêA"ãµGU,¢›‡Âa_Ê5H‰œ_^è^xkï E󉉔vTÈ _<,Fc Œñ´C/¥Ù™C1\Š9(LZÜf&ÌÃ2|ƒ̃*|Ã+œíÞÆáÅ3UñLHçÑv2´ ¹ºÖvÇ3Œ‚t~§LóC¤9BPµz$Äf í«Çzg˜èŒÆLM2ÄM&pxТÿöÇøîS¨¤4$ÇÉ·‰­C’˜CÒÓ ï„ÊéD…†ìè(hüD˜´W?oX$I´CùšC;°„÷3DWæ•xRK&™vsÁ¥¼;•XÉ$hIð ã#ÇF h”›  Ðõûóœ@lûÔíµ6ß.Q³d.µ7ßÚ1ª[*w¡ ºû”q#9qÉ’IëF-¤4'OK6IšÊIÔ& ‹DmØ0–*‡µ<¦ò’Íek†]Jv©XÂdË^NBj¦4’!‡Qs*M«þ]Õº•kW«ólͳÖkÙ¯f¯vë–Œd´oO߉œô.ä›K^B²Í<Ãþá¤ÿ™lØ7œè¢¢7¬[&k˘¾“JíµmËþ% †ReJÍ„“Ëüe²nSIšœ,Ò´Hi˦.ËwºÛì×÷hÿÓ­›œÚæÈNfíRfks/}SõoÙ·J×£¹v©Ù¤k–ŒM2v)û²aH—…/m›8iâÂÅ wU1‡âö"nÁJæÙÆšLþy£ÚN-.¹ “ù¦“¶éÆ’N!çsw¢ÅÊ%:Oôõ±!~/r¢ j¦r0ëE\™Þ£>¦OŸ†ž6c’ð¤«SeÅÒÿ³±·Y¸WiÕU8øæc‹ƒtÅ›48¨BKHS,O8é+¼Esž©S¨ñ‡v¼æY¢R&á†f+!‘`b¸:± Ì*Ä;æ EB4`PÎ7ìhÆ:têF?õ©PÉt 1ƒµ¡"ŽA"ˆ¡â¨ÔHpüé,éq»²¤³ e2 Ü¥.I“Ó°£=´ˆÇ#'rdŸÆ$$Š9K²H0_ÇVò”ddFV1B…b›‘Œ$g<ʇ£&H$˜ Æ06àÏx3Çø‹§ —ê²SÉðYy¬¹Vx°#XéÑU=Ô#×_®Û0æ 'ÿHžO@Š<$,±8fA¾~$$eƒ9¬ ‚¶!BçLÈ{‡ackÐ89‘øÇ<åù yšÃ ?6‡ç`:]JƒR¨±LRÉQ˜ˆ÷/J/NüòÝß ƒ.MÆvº393IÎê3Ô­0€µF™‘„T) pÕÜHÌóT,?§–Fg !ÿCð£[ƒ9F—Á+~tnùœg? r¬ÿáÙ GãK¾¼Lü®/¢KuºœŒwGº 3:Œ—‰¸LnÔ° pq; ˜@J „Y\¤s.‹r¹rÕ«Mm–F×ÕךuVtP™’W¦9¶QG1þß­š Nf-&¨•Ì ¬= ÇÛ\ZžAª3ÏŸR•¤Z~¾è“ûŸ¾ê•,²²ú%]¿¹V]PX‡ñùúÿCNb(šÖg%\Å}l‚Á†ÁÜ¡7äÄxr$ÖR@i”¨/[’âÛÌñ¼ÅÌÍ:kܨ¡Ì!´0ëÜÖÍtæàKáݎʰ„(KþEmN¢µÚ@½H‚|¢¡êh$ÞÀFÿÁá²€d ”H`¸Ì÷ú¨a,n`ö ‘ä{0DW‚åWjÈùÜAò€‹8h¢¬ã;Þëüd'—¯S"¤½T8Ц ^Iæ:çŽöÂÀZd/^' ÃéìýÞî8^Î á!á¶0D¨K­‚º´nÿþ‡ääàŠ*´ÏUl¢ðí6òB*C-g¿l©Å$Žf¨aͧx UÐé|Ìñf±ž:Açñ*ò:áž$/ñÈLn$#¢Re¢b.ă—DO—ZO-²f$æ!C l/ À ° ߌ ¡'I” øD*y èŽTÂ¥&áF¶ÿ„…=BN†,ÁtÚáùÈ#@¥§Ø$Æh(.°slë(Ð óÇG€f3¸äzN—CøþbLàÇ^ܲŽcò¥þ$„ :ùP¬Ïò/äÖê=¼Ž&l>¢a†¶Ù€ÁÕ¨!Ð bp ¦e\(¥$ô$·JÀTB$ޝˆ²Ãe Æm)W°);kò^°Û-Тd]d…Ò.PûÂí¤Á£º’#°£V Gà*>à*0à*Æ‘„âÀß2a|:Ägcd*Ê#shÿk³!óÎÄ ÁäŒïOÖ F RvŒÇþ!üiçŒÇgžë¿Œgÿd'Ñï?’‡Q<ãí1 £:`¢‚ê§¥ŒHB%~° ŠG†Ð·Æe´Jè/ÌÄb#Ö«Tô-4„$&á¿42#_‚Ûú®Ûdx<C`¨†Œ¥†þ,„®ÿ®†\HHs%Wr“7©bÕ‚aFËBˆ2ƒNáY†9AÂÀòdÀLÍIß3˳̭ܺÁ²T)KPŠ M×Þ$tÐ,Eœ†¨{’Ã)BÁ~t©ÅüçŸÈ¡®Â?­" ” “„, Ô,ÐÈ…PF$gô áX¡Ú#ëtE™,oвaÓ'vÚë¦ìü¾ÖËxäÎxvµð'¦‚0BOc&C‚hÎ;‚"<lš!_€ÁÐà8|@ì§ÈÁG_h?1o<â—l…àäXr¥ÄÈ#numL‚½Ö°½øå‚IÆViCã' LøléÖ^"Løð*ë²æøÛèø(Í(Lëö/œB-¤uHÂNÏ@¢+NŒ8È‘q%8’[wQ„K ”ðÀ ì ‡j¨“Ås¾¡˜•¾¦×Ë)ŽÁe\dòç&ð(Ù€ž‹$©w…§þágh¦`¨t¤©t\CŽxˆMÃ*Á&¾¡ rÕ9†8¾à¬¡Qc' #:c3|p`$`NtnDÊ¨Š†ÅCз«þË8 ¡ÆpÿDmÀëæAmÈàúî´9vl‘ˆCŸa/(jÖ@Þ‚È&À¦š2õ¨Â¡h”~Ã* † #X’ª¨©¬‚¸€ì á8ˆc/OtP+NP‹ªÛ'ãð0{΃P$.µ{Èdm&Âg—iaì‚ôA9†ˆ„HE!tŠÈ ‰©§r4s!,pîÐDMÞN‰êgl)iÇGŒji:TKÏXl ¬²L8à˜á¬å8)L˜ÏÈ„#‹­CÅ„/!‰º¡ÌA23r±­\v¯âfœb©^¹q!£ûT-¢l¸@àõ^A¤M§|ÿ€©Ì!”¹•)¤l1}¦Ôäîä–'q»•‡QÐLþCxØa——Ï›`Óš–ï—ÑFÐ…-øíB›5Ám1`‚{M†q¦~0J M„0pç|ÖkTÙâ½T75øË¹Ðù¥Ü ¤œˆ¾ÃY¾£ T8 ¹íSc O⾟ñü)ú*¼Ñ`žÐ`V‚ …ºµ8¬agŒêA¤Z drÞ!æ4­êÃh›L0ðQ8«Í¤ÑCVóòOÖ¼÷¾g_lp– ì/9ääÿsà×ÒX÷Ob5B¥oÁ>Ab0AŸc†­Ô¯FfœLÒF,'ÓÕáM5ÖSùïàf(ÖøÃ‚™RºøóÁB2?ÿ 8a°µ. *€yõMÇX ¾È±|qÄ‹Ÿ,Xš1Cíu”¦4Çþ$þ#æ(Å+÷ö>XÃD?TÌ ÿ”¯]a%*)æC°‚4’`%BÓ22ôÁ¬ ¡XÃ;€`$D@^àþÁBjHÉ0ß\F3£$“=1TÕ‘ºþÂCºós)Ë^ÙPõtG{º±Öˆe+„ù9øµ 1ŒÇ3x5zh ¼qˆ¥É›§$êŽ†Šæ‡>$Gù@ŽR´#màt‘ÅlÄÍÚ"‘„µ]}£BS|eÞ€C@È>Q€ëh“í ÿUP#Žn„­…öÑ•up¢ÎsžPMW\´—½0 v@Óo.èQ%–‘²®¦Eÿ ‡<\$2P,ÿ8¥Š¢ñ ¸Òu®ßÀ%*犚Yš–u%HÉÑŽTðŒ:`b 0õך® 3FͬÙ;\³o\U“Œ$VàÈ­µ §Û˜,½@µ wËEÖù†R›—®ÝEõµ°KU'™!ˆ!rìRv\UÖp‰å‚Cžj©¡…"‹G|(F—»ÐŒ¶ínuè5ˎ곜 ¯HGÒé*\²ùî îEÚP¸ƒõLa"SXšZ;‹»Ì¸n`ï˜jlÿ÷Ë®vâe¶WBRQvˆƒÛØFö|‚†žMâ[yOlPŒ×Am+ š«5ðªWÉ••·d¥öæWVº’±<-9ZНi(™.3:Ž!bŽseT’5¶\jhvkð* ñÌâ³dÕ,$ô îøËä&£%0œ+Õuêv°#∘§ÐxÜpA¤Âî˜aWá™Ä͇Íír‡ØCè±mH"*7ÄèN‰-F0tªØ%Ù˜Ã&9{Ha¢š™•¸)8áäÛr9ùÑnÞ¨Z”iX9êG8È‘¡C`‘˜‡%¾ø$£#dÖ͘‡ÑŒðiÏu1‡ãªÿ½: ²Ãÿ(Å7øëo”☊Å<@Õ—QÃ(-l&½>Í•ÖÜø›ù" † ¼V¿Îö}ÿÒÂù=Ê2äPG<àp°Ã¢z "v, ` zÕ°k.cúÐ9œYÍôN.ºïèΡ΂+U¢hôç‘RC&ó W…¥#´#¾¯ý‡£µMñ&rAÖø„5Êq—»ÜÛ¨§s)TwÄðæH—²d× ÿÖ³VظŽ>± VxþºÀ´Ø;šnå1ªvÜ·õ7‡Œ„ÛØß6ưîö7GÝŠÒ¼»…qxô² ydhóÓp„<¥Bð4yÖ÷€î„mm'}³ Œ!âàuðàyW&q¦ýSbŸÐ ÿª·]ï09áý" ¶%Lò3[’{@ñ%¹&ÉÀ;‘ “e Û€ör3ô¢!„Þô7iU*IöAó@}Ø„Fƒ±*aÛP˜öuå&cw¥P7° B$%ôç6Ž`&3 ã …Ra;P\£C £-Š2ÍÑ u´cB¥Ý9ôTØÅ€È„NXˆ×E$¡#É ðuXhnæÖi§Ä+£—=ï%ý‚?&@1Fï0FèJà€‚DÁ%IA•ÐLÖ`‘E\hßÐcÐg$À‡´„†˜‹±å_g!«A#%õ ì0 ß'n™Öb e gd\RÂÿK,qPÝpueCÓø†‘É‚†™€6' öÑ.UK¦‹êHy6af)s â@nŸ'~’˜3Ö3w‚Ÿ¸‰Nè ßà‘` þ\!]ÁÃÀ “%p)g1 ˆ‹ë˜‘•w;$Ñu@ ³ÀõÀò(¥à)ÒÙ!%jèÓˆ†Þ1H“âAFh¸+Ñ" rDã# çcÒv‹¨‘D¹_¼¾H/òcGná…yó%àÀ+óp‚Z2išNaZñß@AsÔA–ö1N‘4[aGöAX”pù€ Á@— …˜VnÿWf E9d0åQÐ €iËP†éa ±:Š'q4a!.Q7”qY™LFˆka/™”†—˜u £6Da1HQZ–U UA–Í–&÷sƒ$ÁTfuXó––¹›Ù†™kQ`q4êÀyb—eÁñÖ“Ð]Ë€(Íâ´a˜êáÐI+ñ‘ Û;ÞòGÃD¾ƒ‘¼ž¹x'ô…ÁÛð™Û #m€$!’ ¤tLa2 (!õÃ$Û@dÕ²ÙREÒT÷å›â9 ÙF™i‘H;®Ð â ,t8c3d:¥“Ø Ù’ Ùr Ù;Yà¢ÿXžZ¢”g hS<¯ÀOÍ!VàÀ!5 _4-„º²&J£|Ê÷ á£æ˜;j¢Dš‹ vP b4≡“«Ñű:Á:É ;±ÿùD315ì4¤E¦7¤À“H‰ÝðR>ø'’ Ô°!Q2%6:5AÔQh‚Á.R'¦|Zˆ`j‹ä9-BX€Á9¨DH~Óm­u”}©T÷ná.õ”H0/BØ 7c “Õ<>Ø<ÂbÔÑZ(*©¨j}z›gV†*e1ÔDøÒBzºª©z«•g«îB}î‚›ýõ§¸¬¬iA¬ã’ŽÂš¬Di¬zÀ¬uB¢Ê­ËJÎêÈ*­Ø —Z­y¡›Ùú­•yªÜJ­§ ®æª‘`j«sá­çÚ®») å*{ê®ôJ ˜©®f±„øZ¯üš‘U¯­ý:°%j.þ%°›°&* ˆ° û°&:y ±[¢ãZ±›±ûN;mpb-1.5/doc/tri-rods-ez5.gif0000644000175400001440000002244312315325376012572 00000000000000GIF89aS`÷þþþþþ þ þþþþþþþþþþ þ""þ$$þ&&þ((þ**þ,,þ..þ00þ22þ44þ66þ88þ::þ<<þ>>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿ%rŒ;ƒþ)\ÈpáF—@¥‚U+/_¾zé²%‹U©N• Ò ,Q–äÇ D4¡ÒÅL?ŒêTxhR'S­hý„ˆ¤I–.aºd‰R$H‘(e µªÖ/eÓ¶…3—n:tä¼YkŒV©Jƒâ„™¢Äˆ%Oªl cf :yú2´è‘¤JJ15• ’¤KžNÅâe ¶oåЩkõJ–-]¾†!c&í·­ëÞͳ—o?~ûôÝ£O]ØkÏ ã…ëß©K†úð)dIÕ¯dÊþÝŠÕj•ªU¬\Å¢…‹W0cË UÓö\:wòêáÓw5¾zñØýÿ$hP¡C‰ŒVú K—æeÊ ëuëÕ©O—Ú#'M,P$!7Ì Ã 8¡MeØ5‡wä±~È „‚È"ŽP¢É(¬ÜÌ1Ê,“L1¿ä"‹*¢d "PH1ÅQ8ÄÿȰ`Ðñ‡ z°±ÿáà 0¤Â<°€@ `@ D` Â 4äЃo5ãŒR<±Ä8ücCZ¸ÁÇ ~ÄFHüD3¬@B~ r#‘T² (¦°‹-·ØâŠ(’âFMAƒ "l`ÁL°%'À COdl´Á†h˜QFg¤ÿÁÆ]xôˆ!Š<"•'¤¨ -Æb ntŒ!8´ð'4×KF»à2‹+§€‚É#¹Ñ±Æ[LÑDád.!…c¸¡Ç!ÿ„bŠ(—b‡[\Áÿ òȇ«ÈrË.ÏúÂK.µÀ¢&’$Èn”Ñ…O(Q„-Ä:é”N6ГË*š$r‡W0q„I41E_‘†sÜÁ …$ÒHT–`²T%“¦¡–Ï=ò¸ƒŽ8ÜPÓŒ1¿ìrË?¢D2È~$ÒI,Â,ƒÌ?µ¼ÂŠ*ÇùQdt»>à@Ã6ô`Dè¦ñ†uD¨}üˆ ¢H#’`"Ñ,½S¢2Ƴ -­” %‹‚Çfxa…F¡C Ö ÃM„FqÐazìч0€@RN9@XÀ(Œ-Á x„"$ Oˆ‚Œ¤&ÿ ¦p<baf°‚þ„ÔÀ&ø@&Ѐ`ý Hà Võý`GX‚ÿ:U x -¸A˜`…/Ô¥ mXCÎð*3 a nÃöBØì0œ*\á·[ÌBœ`„Ѐ…$ð'Pa8EŠ@3ð¤À—¥Š St•ΠøÕA`(ƒÞ€—âýA!e¨Âv€ƒ! ùªD)dÑ c0#Ó Æ4 ÁŒbô‚ªø%ч9¨A \À¤…ZN¡ XØÂÆð>-‚î‘ÿPÃŽt!Há|x(\‘‹a(ãE)RÑŠXT„¿†1’ÑŒhL§:êpÇhòÁ8ÕÐãé‡6¢Œ¨)d FˆÁ R`ƒ…ì(7£&8ñÿ R ‚¿ú—/„QŒÍ@ƒÙ8:Úíèã¡øÅ(JŠU¼b¹ð1” k|&2JûJ9ÂÁ k@ÁÀ,îc‰FbpøG¨p…1ØÁ¤°/þÑ‘SŒ" ª(Hq U¸Â_¼2œA m€ƒ’ñJ:Ì!o`C˺ÀÕ-`Á[FÂ?8ˆJŒ" 1\†,@á?@R Fà X€¶ôðð=¶FS-l•«\ÈBž€!ü£ aÀƒ2S …$âvh¸À0áŠo˜þ…CWý) ‘†!/0A,ÿ€0$À•pÃîð2°˜€Ä%ô¦6·0X)DTPA2øô6p pjÈ@Fýî F0.™³°®v Z°BJˆ ,¼ášðõB‘/‹¯ EàA Zp‚ps$"rx‚Ì ? ‚œ \jaÿH9 h$HA zXÉ)eQ¨B¼†2È ‡„#Pw jXƒ·ÐÄÀ §°` €\ÃÌP˜@ÈÐà:ðL *` *pÁ t@„'tÁ ¸Ä?va ÌÅB þ_ Q‰>‹‚¢ª0ïySQŠPl¢Ú€¨C¼0…$1h R Äà@XР‡G‡ Â°*0¡?TÈ‹Ž˜&¤`¯1¨!£UH ð€†+a6Ø´ðBPB­°E/´‰Œd£ÀÐÅ,VÑ¢Gb­j¬ ',A IHšó¹œÁ uèCÿB^:©%ô 8þá‡Gt"³ØE0Y«@âˆ8!„¬ADb™t÷ Ö° ÞßÀ Ø Éð ´€ šÀ~ ásS 2br<çsY´E€0‚…y°L÷}À›  ·0 ÌÐTÞð{¶ Ÿ0 ¾¶ ­à ¯ ³p¿P Ì0 Úç€8ó@ó’£NÐ@ ¶` “Àb 1Að\`àÇE^Ä<–àw€—¯ ²P ¸0|Ê ±hï ô@uT¶° Ù´Þ¤ Æó°8üÐ|¸ùÀ®Ñ Õà ²ñª0 x0U0[Àÿ ñ ’ CUTÕT½ Ðñ Ô€ Nò@ûÐþÐüiÈQ<8œèTåNñ@õ`ö@‘£åð Ù Ê w£ £€`Šðwp€ ª Õ° ×ð§”7© §˜( tƒZ†³Pð0³hõ0ðÀçÛ “šM¦° ±p ¾` Í0 Ø  Û° ÙP Ðp6½P Ò¶ ³0 ÓT0; 1 !}Q°’@ — œ ¤ ¯P ¼0 Ë Ö@öh ÒÀ ˜S§*np’'Ùnw0“°Àp=¬0 þ¨0 Sœÿµ&÷*`# "@(à5ÀC P c^ °’k ’(éPtÐ A¯` ž#Q8FS³ƒ*ð&`K@xp×¶ÿÀU@>>`.p   p@6d'À Ôø–2g–QÐGÀ/ð#ðDÀr ú§oð^ Hðx1`r[天w°žp Às Fð7*0Ð$ ðBÿ“,o '_4€ˆé@ÜWX£IšJ„p ëh ”…DÂ',Pp32s+Œ@ ž ›ÿ£qÐæ'OÙ    D/w/`@íCs`ÿð Áp|»À › ~€ 1Š ˜ÐOÔD¥V ®  ¥pa®¦-ÿ5%ÿt5@5` Ň Æ0Ž¢= ƒYm0c_õL€}I LPv;Wl0zÿP0bР8@ŸN ÿ ™` ° ¿@ Ç Æ7 ¾€ ± Ÿ` ŒÀpp`ZPPР*ªN`€Ý ÔÀ À ¬ð žcjŠe8v;æY`sH~ ç†`£  ‡` ¥0 ¿ZÜð àà Û` Ï` ¼ £P HêÜbˆcVpv»tk0ïàÜ0 ÈP§š@k ñ=°5µs2( ãUT¬@b,òw Î`4ãpòP„àÈæð Gÿ ²°šs€I F@_,É·¢ò@³ß€gã ÿ° WÀzfŒ ÿ ‰Ÿ ½ök¿ÒÀP ‚# X ‹Û±‡¦¨ó 9á  Ó ’: ŠPž2òr`•pµ“(Q¥P­¦Ä‡º§y`{°¡ Π ÜðÁ` °°:ÒhƒÅ ¶‘%çÙA‹õ@ñÐé0ÝÀ¯Çð õ ¡  ÿ Vv… ²p ×° ÿà1²Ð ª[)$_pä³6£ Ù™32ø`­0 º Èð Õ õ¨ ×0 „ ¿ ×’-k Zÿ²Fp$1°'@@9…):HàT]d`Ni’( EY´ˆ`µ ‘"² Ö‚-} -bàVŸÉ'-€ð+#P*7ðFÀ¬ÇŸË…j"Àø³ž}ù— Ð-Ç%~¹1AúI³ôŽ7ÿ (ÀS°}`†às Z0k²3À$à0N’~‰¾™u0o)àaâÅåQ`[›º)C @°q+šÅ ´2LvûÖo¤éJÆ~ ¢@ašPj0ŽU/€ßÅB %º¹›VRCÀW\ÿ×Ca'AôRÀž °6tGÄkE€÷A·”K k$ˆð— ®°S q:ÿjpG-uMÂì¹ÂZÂ# 1€\|Ðú1RXKÉ\ðô:`S qŽ@z áR|€u<@¶}¡Oü4Q¨pÆa ø±Š˜>@×pÌÂéÅävl°Š· q0¸9š3S3 $ nð”`7…³SÃpØ¥l aôO)k¥²ð «p ©[m³ç±#J0=« v@pP°iVY Ö( ·` •ð|zJjŒ0 šÿà.K”]Pmpð‘ ŒoÐOàM°ÿÀ ¦ð : Â0 à ½ -¬@ 5 vÐ0^p™F@DPÀüT°b £`“à|u0SpE W€/Šp B º°scð2t òÜšH2 #D‚‹° ©@ ¾ =Íà ÎÀ òÁ ´° ¡ðbÞó_¶¬iâMàdv\gÐr€|ðHyà_à>0/pp²ªò » T`#6~p<Ð ÑO€Ô ¯@wL5Ú€ Ôð Çà ´ °ex Y]€‹8#9–KÅÿ¼Œ”ä!ÀôVÀœl›¶œ° ¸P:!3]´!ް ¬úzðy ¤ ¼p Ža8åPäÛÀfÀ@ Âx ^À¬¡]vgG®ÿ©C¡<°Ž°‡ðÛ ÁГ𠬀 ÄвŸAy6²˜° ž@‰¢ã1NQAÁ ÅвÞ`íððàë`à€ Î0 µP “ðiPE°bRNP§­ED[j©Çg@ 2ãDÅ ² ¥C Û èÀ<^¡fTËq ¹° ¾ `;8ÙåÀh£ø`ºëd ™f | - 9opÒ£•ÿð£ÒDM}c ¸0À0 ÇðI×p40[÷€÷@ƒ‡Ùdhƒ3»Õ‘íø`i{ó@i£€[«m {ÒLð°¶#k égÓt‰¹Ð nÎMuhlˆ£8Üqû€«@¿®‰Ñ½ß0cÞhÜÁ‡ýà‡õëPÞp Ð Äp ¬€ ‚0X´ ©6©p îþÍ|ã7”ûæòØ  !¢hí§(i”1†Í>éÑàâ †uþPùð“69ÜP —ã ÃÁ Mëä=‘` ¼ ÙÐŒû¨:ši>ï5rŠÚANúpçë§ð†‹¢ »ÊQµáÿñðÐê`äÈðÏÆÓÆ= ÁVD‡ ·Œk ¯  §` ¥` ðþ+¿®L劤þ5ï°è ºÞ® .¤§° !Ï»Œß ã0âð ûšÃ jª ½ ¬¨ qQ xÿðSžÀ ™ 3˜ ›Ð ŸðgF…Q¿„ã á°öâÝpU¥ä µ€ŠÀŽpJ «0 ¼@ Ñ! Ó Îî½à(¦Ð ܃¬gð»Œ<9ké"3ÆS„P’‹°á F¹ a; U¶ ˜#¬ | 9ŠyõÓ]Ä–0 > Ä Áÿ:¬Úëj¯3ß«B`B0 y•§Á?pOÐ5bà¿lðq0òsÐ_?«=‰ žPâÁĈÓ5‹©M“Â3†L™2dÄ€é¢EË—ÿ(ÊøO¨JŒ鉃拕&EzÔx‘‚Ä2hè‹9€Y¥ ._Â8„Hf /[´pÉØè¬Ž£0=2Ô‡Î1Y¬`¹r… %@jüƒñƒŠ›A’.QR”‘ ™-S–Ñ!c (DpÀÀ¯ƒ4|(±"Æ AŒ(q…Š•+\«Da2G‹9š˜éóè’%Gߘñ‚R%)R¢À€8ˆ°BPà 0à „Rh!†rè!ˆ"’h"Š*²JŒ2ÐPà :þy„[„!&R QCŠêRAÿ8c7èÀ£A©„”Œ²éÆaPi+ $v€Á„,x` (À #°€]˜á†|b#X¢±8»£Œ;å°c@‘䓎¸ÑFY(ù '~˜!0€_ÿ $G(Ùd”Ujée˜zùg“Bàð¢ gQ°rpà .耄jðÁ'¦¸B‹-úí— /  6à¨#?9„I2%Yt †˜ŒDiä2¤†DØ ‚ Qä‘I0áRPYÅ•W\YE”KÑc-š¢ðÒ hA…zH¢ 1ÜÀãAùC:âxÃ7â ãŽÿ=¹ÖI,ÑÄ“QNYù•WX)…“áCŠ"r „ 2¨dëPH9%UêNÅ”PJ¤8ÈÀ‚ !rØÑF(…hð!‰+ÎÀc‘N2¢Å•Žéc>üÄE¡ÄdPF1ºWIå”Q:±„‘@êHƒ (ŠØa†P(<åUZy––YI¥”O2‰‘?êPŒ*˜ ‚‡dxÁ…d¸¡‡" è‚?*ùç—dš1&U0Y$þP˜aL<åUtû•VTÁ{J7ÆÈâ #~À¼à²¨Å-r‘ \ÔB­@E(4!‰…ÜÁ eàš`„ ô`:Ðÿ€P„%PÁ jÀ"þ± Ê¢“ÄUˆôA0¢ž(Å*`A‹[඘Å+TAŠN„„$1Éž€„!ø€ÜÁ/„1Œa㺨…+Lበ"%C¦à%¡D(‚Ü$,| qÐ!þ! I$bjÀˆ`)ˆá…˜Ä' †‹^ŠÂ/n‹T„b*†ÀÍÆÀ…*@a Hã‘À g8£É(†/ná Rhâ…؃Ò .\a PpB+…)Xa _(Ãâð+?dDe˜nÅÊ‘E+p c,ÃÏpÆ2ŒŒ\Ę"üÿP‡·x TXšðJ)T!ÚÈF5 ¡ aࢡ "ø‡3€A V ‚¦`¢}éª ipƒîÀ‡?B€èÈþ’BíѦ ÷ Q lóÒ`1v‹Rd‚€ ƒPé•)„ô1rúÂÌAq\ÊÄÀÅ*8ш>¼! XˆB+Ÿ +\d ‹jTú C$‚Žx„#ˆAäò~(Ä#6 ZCÓØ8ÆQŽrŒãÙˆ2x QHb¹Ù‚žà„›æjWwšÃ;ØqlCÇÐÅ*2a8l! =ȆÂ.Á–Õ""‰Jd‚Ÿ…(ëXÿÑ©â·ø2 ‘ p˜cîxÇ;Ú¡Žrx£Êð,>Ñ<ˆá @À€€)hA ièiÂêu”£Ô í+:QˆŒÌ`i‚ÖP>(¬s%;YÊXñ ÞB¼p¢1”ñ kl#ç`G<êq|Ü£òpÇ9Àqf£¤þ‚‚¢AzD!°% z¼#ãØÆ4–1 ]ücwÈr°ƒ#dÁ !Y%0± OÄ ¬¸!.x b ƒР6¸Žr¨Ãó°G>öÁ~ì#·eGh­á cøBÿÄ–°a ghŠ$*q Mtí0o6(ZŒ`üÿCŸHÄÖÀ†:b¬°Å?\¡ Tœâ¤{®,l¡‹_ ͈FvÁQŽt¸Ã»ø8q?ú‘â{ÌC¿ãàF5œq aü⦈DL‰J˜bÆ'̲)ææk@ÀÈÅ,(ŠIâ`„'j¡ŒklãÁ¸E,Z± P·^³˜1lxcèhG<èq|èCù¸=âÁs€ÃÈÿåE-^±ŠÄ,8Ä%\1 jdcÿh´+XêEã§øÄ%Ü7œÁ nÄ%`AŒgü£ºˆ+PaŠR:ÏÅ-x c0CØP5:ØñŽxäÛ­é(ÇV¥ñß]ÈBÿ¢ž ç3¬AH…/špÍ¢wCw+G@H° ZÈHšÀ8Âÿ…(>Ñ Md˜È„&8áR ¢²¸E/ˆ¡Œh\ƒV%Ç8ÂálPÃÑž6EBÄö¸Ç iðƒ$H> Ptb*gùµqãÑ,DA CàkþQ /¬zМ AˆBâ‰PÄP#A‰Kl¦p…-|a 2OcÐh2„± ƒŒBÃûƒÚ@A*0¡?ØAt-œ!>„Ù öCŒ¦ ‰/‚šç‚¨`/ ˆÐ„*l uZƒà :Ôáxȃ0§9C°9x×›; »AXHH¬N…RHÝú„I(„:0ƒ+Ø+Hè€ à™Á(° h‚,09–¤ñ<˜8p¨‘ƒƒéƒ@ XŸ,)9(„KȈÿZˆ…Ž ?؃=諹¯¸ûQ(…¹©,+PÈH(„>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿuµjÖ.bÏþ)\Èpá²`¸`¡ ¥‰’£D„þì¹C'Λ6kÔ¤I£fM›7qèÜÙó‡P"G”4…B W°eÖêTHl׬U£:½œ„i ªV²níòl˜Ó`¾tÙŠÅÊT(N—"1:$ÈOž:pØ )#æK.[¶péòEL™4làÔÉãGÐ!F‘,q ej¬Zºzöô×®[²Z¡å Ó$GsìàÙÓçO A… B”¨s"Dˆ"4(П>zðÔ‘ãfÍ™1_´Tù§ÄÈ ?~bDÉ“Z¾Œ9³Æœ:wôð±<ˆfО?‹.TPŸ=x쨙Í3dÆ„ÿóÅK—.^¼| #†L3hÐÜÎÝ;xñäÍ£ÿ†½û3ñ´ÝHö•1†a”wÞ~`ˆ1Æ{ 8Çb‘ÆVü³ÄC‘ÛnE ÑÄ?Xt!†j´‘Òyðá ‚RÈfœyš!…" ~ð‘‡tÀцfˆÑSüƒBàöCDÁDÿpÆ[qaô‡v°Fä`x–Zl…AqoÌq²$•hòI)ª¼BK.¼ æ”0Àð‚ -¯¨BÊ'šT‰"†ÂǺFF‚g¥Å…`Œ¢qv°Dˆ%,’h_ÉñQH"•ĆpD¦‡ƒÒˆ$˜|ÿbJ+µø‚Ì4ÿ Ï=ûôÓÏ>÷ÀƒŽ7ÿ ãK-­˜ò &’4rÈ ~p9n°Ò|&½q\}´ù¦–{t鯗a޹Özg®‘æšm*§œ¤ÔI .y6 Ÿ¼ä¨*¥j¨§Š2ú†£šK©¥j`ªGKÓ²‘F`p‘!Gá¡nB!"‰&¢ØtØÑâ‹1f¶Yt ’ãŽ=æÁQCyd’HÑdnA qÄTnh°ñÆ€Ý}g ù-¨{šá|zW&Í`cá´|ó ŸS#Xž~êõ—õÖJF —™\cg)VÚ|èqÇj­½´ÿq³nCôö[pÃwzTv™s4¢<ÝÜ×e7&žŒrTR»üÒÔ½Àô¢K-°¬b'–hÅ•W`9L–Yæ²åVÐrÑe^—ìe +±Ø¢ SN Õa‰-Ö‰cŽÀ:'+´ÄŒBä¤Ã;ëœ#Î6ÿ(L.±¨TéóGG­mÚÅ¥„›næÅÉ(ªÄ’K0É($Î9ë<Ÿ9Ä6C /´°Ò/&Ý*D" J\Bœð(B!ІžØD&,1‰G,„„÷e†0pá YBŽ€„$,a!]ƒÔ¥&>‚ˆXÄ#$a‰LlB t 9¡‰KPHD!ÿÁ†“À!rÖÈÄ&:1‰q€ÃGØ †±”… X˜Dˆ„.¡ TÂÚR†3¤Á$¨Š•èÄ6.ŠR¬Vͦ.dÁ Rø’ÐÅ$(a!WØ‚ÌdF4¾áˆIt£áø†j­! gx”´p…$5A |D‚˜ +d¡ •‚@•:4Œa’ Ù#H¨0þÃgdHCä`‡U ŠpD$*‰Mtâ9tà':¡ LT"Ž@TW¸$‡6<ìB ¹ä*KÈ„ßdÁ c€Ý\š…h1“BUüÎø ù15i* Ä&fò [øâÐPˆ9Ôñ:œÏ[yHûÞ§ \ͯ~츟B˜Ñ“þý¯›E*Ü'Œåý#ð°>òqz¸ãÄJÆ/láŠS€"é¦F*Ç‘èT©²è áˆId§p…-~q«œÃô¸G>ðax¤#ÿ`†0°— Ql&™8ž,rñ cø·!Ê †/n A O[)a¦†3M P~ÐR‡¹ôav’¸„zaq‹^C QÈHcl `äBU!%ZÅ8eÂÿ¢(E*Xá XÄâΰpÅ*PA Pp*õ”’¿×À†¯TÈ£B¨€…-‡8 ÃC·p)\Lp¤@Å*ê|çX䙩0…(¼Ð‰`„# kYÓš’ˆÄ#¡D¢+{@Ƀ‡<èa|èCüÀnv«›{ÐC²S‡i…,“œ Ål„ dlgj½æëŠ9„¬ÜçN÷ºÛí‡wÃ;5w›CJ²6XÜZ¤²°…·³†Š_Üâ× +Õ´,”õŠÿ¶B£AÙø¤ãï8Ñ4Ž-_<äN˜²p…*LöT¨[]§53RüãŸùÆ)nskmGj2‹Lþó= cÄZåC¡4Ðñ ÊcŠ0!ø›½qÇÌdØÜ,J¸ºÞð>ðáá.’¨†Ɉ!©oLò÷Š„YÁÑcGpzÊ,($ ¶1û¿—ð Ê²Ê-Ä-cØWÇzÖ´ž„¶qAC ‚n_Ù3­ª¡ŠI>pIPû5³:x³0Cƒ…¸àx\3 eH˜Vï›øÄ(N¡ŠV¼¢Ó±xE+TqŠQ|b¬ b7â¥N²¯ÿ ÿ‰¬4ÕaUÉ3[#r(3í­q™ÃyÝ K¬®¨Å.„ gLã 1 ΀ Á° ´Ð`(Å)‹0DeZƒ†SKU  … AàE!´qÙBKÜ2;‘p ž@ Èà ÅOäÀò b&ì@ Q ¼0 ¬@ žI*Ü1‡æåB… €ÈáW'!‚Wv%x‚¬0 *˜-ø‚ùƒ3¨ ÿ`ƒý£ƒ<È>¸w×baCh>Fˆ„é·%â²íYcFñw^…ð&ö !–<ÁÐ 1f( »P ®0Ø×)‰Ò€IÿÂ-G sQ·—{»—EŠöSÀVƒt)÷/4@4”|Ë×|Ï×iÒG}Ö· — ±Ü7.e Ww”$ áI䇿·*„&—$Wvg·3•w%—7˱y‹Ðy‘ðy Wk£Wzƒ A©çLÃzxB{²×UµN_‡!Gv’‡vJ vbô3S…!wè¦pt÷nñ–wt BRE23€÷z„gxˆgp!R#_À{àÇX eò†e*7'sA¸t0s×òT#u=·¶xX7HR&ùJ'‘M'sÝHÓ%gU`‹@§r‚Ô ørH—t) Gÿ÷âFn  'ò–õH-rˆoY0ÙhvþVR¢måg„*ã&æ†ns÷“v7xqq0uQˆ Ì( ”`m•Pk·–k‰0ÖñMD"lzTlý6xH0%ÿÐ1,Ôl@‡mÓVmÏhkÚÆŠ 2à{°ax'pf sÆix¦g|ægŽ‘ŸBh†vX°âH¶‘ven’N–†iš™žæ  V £– †²0!'·³cÀàcÒ A Ïd½@dÚÓ ­ØƒÕØdOeeDeV†eE/\æ _ ÕÀÑÀ Æð gæ?Ÿ ²–_û• ý€&`ÿf`V, Ö`a§×RÔBEOˆaæôÖab#– ¸rb)¶b-öb16c±PcØ·>ª á ÿ0ì0ùÀü,ñ 0ö¸pRñ†>N' ç+rN±ÉN6± Ñ©ñÀ+šó0ƒÙð=! Úà u ¯p $& ÿ@ëó@òðé ÿð ÅÐ öÕÍr:ßôRÞA^Q8Tw+žP )X !éàò@óë@Üð v Zœ _Íi úà0ã ߆ôÅ †è`þPBEFCîá4µ.ç”NšbùÇ Ã° !n Ôÿã Çð D– Üe x¡|Ø ³ ¾0 Ç€¨ª Ç ½ ¢ …’°[VD_ЪìQ¨Å‡„1 ¥° ±p ¼ Æ  þµ È@ Ö9 Š! Ý5š”ðfËÇ °0 ¶€ º  ¹€ µ bÃó±ø–ÉsV rZ0F'"|™Šfi|¡ ® µ€ ¹­¸` ³ ¬°žàš\°K–ö qv ¨ ª ¨` ¤0j¬øC‹ð,p¨zU…G©´UkE~—GS­"C“€|ž ¤` « { ¥0 ~æš‘ }«"`Ùj‘@ –€ š° ›À ›ÿ  ™€ „L”AKÖº·7´qE@DÀ””_P~˜çl|¹º4\˜ 3k³7«³Øöºöm~P^y†–ËèŽðfëÀ‹°kÔÑ–‹GU‚”¶@9cK V°$K “ÎÆ²}¹ŒÐe{¶h»Ýfz‡‰qˆ“nÀ6‚0”[¹‚ À#×á2«qE¢S|SR·wëÿ pévÈ‘”ñ"p¹•k¹™{u“spHDu`p‡¾[ny0o¿{¼[oöøU„oâ8´E{´GpŽÿ`O «‡Ups »pw¿ ¼Û{Ä[tÿ qSDn€Xop¾T¾ê[¾è‹¾åÛÖr’:ÇW áMÐNð$ÒV•RF$A¾ìë¾ë«¾í{¾ïKEôQ{: œ5e! ™Ài‘©’Y°™§›j±-!L { ̧Œ“ô!>)[ ŒXãJ)Á Â`#Â#ühóÁE6åÂÂ.ìÂ1Ü ùrsuXd¶x¿ AÒËrþkPmÐæÛ¾LÀV|WN'5)És“5"#¢U€um1)òH_÷AI²H`F[FPx ñI„T½J„½Þ»½Á۽߾ŽÕˆùx”jyÍkH`Yéh)gÿ^™)Žc1u "r\"À4Ú¢¬ë"‘ûº±K¹˜ Ð#©$!³ˆEbg3‘ %MùJêX¸7.³5lKB·u+„×…“&"³1m¬F¸f{¶i›¸:‚zÀ60¯¡SÀ¨Ê¤«1LG)ä‰ë§§<1müƸ5"%"hR„ò‰K4 •p TK³4‹³—P ·Æm¦§ߣÌF²™M0B…\—z{%æ [s Ëa`GÑÄKÀN@%³itÀ-íR<–€T¡0 K°{°&KL¬•LŸ’Abh¨”JÝjEÉ—ÒB—IÊ\G,½$"HlÇU–P•º ¶š ­ÿ ´p ñ*­·@ ±Ð ©ÐgØg:Ð’z¢W[Às 1t•òÍ’Œ`ƒ$CGãѪüÑëøÒ5µP”/¯ ÀP ÉÀ ÎÐ Ì Å …ø ’Ú åPz€{|7rVm6Y{’fЍ(„6$a55$\HÆ1[-¥·: º?Ñ0fnºÐ]g¶ ¥€¤ 5ÔxY|Ú§miè³§DYEÞ’§Reó§‡ ºÐ_9qíó0ñÐçð ÿ° £ ¸ˆª^î9Ú†Epñ鎠€ ¨hÈÛŸPʆM+ï„£çðõ ªõðçÐ $u,­ÿ0ÙÌ’deoÌ¡Qèµl’‡õ×)ǽ£¢ÜÕ«*u¥”S Ð} ÒMÝÖÍØ­ÝÜ]RÈÞH¦¤ÀÖžD…Ú‚Þªö&ŸÍRñáÁ¥­àô§ìÃ_ˆjb¯Û³]Ûÿ© ÛE:{í=±üÛÜRiQÄí]¼$~}ÕÛRØõ½ ;? nÜ-¦Á  ?!à•:¬Ù$,JS„ÞÒƒ½èuøQ×Xœ ÅÕ•“ _½ a=Öó…Öj] ¢ƒŽ1äqÍd‘„4u5wšDUÒ'=V”®ÉÒ@ãÒ„Ífy!Ó¤@Ó6ÓÑš ;ÝÓ©P  Ԍ׸WÔ{ÿerá ÄÅÔÝÂÏþ¬zdYV×V…2 ]T4„T Ñ!;Ѧ0 ¡`Ñ®ˆ(¾¦Ñ…¶ÌG™Jz´t<ÒkRÍ׈Ínì¼r|—Þ¬.æÅ·$–ÔVÎçŒÎê\ “DQE7ñìó,vDk´†¼U¼|˜‚7DòÏ´ É·œË§‹Mh-ò¿–ƒ[¸ÄL˜kyÌ>’̽Sÿ0vMòÌu©Óœ0j”7«GcË’ÌÍÑnÉ)!Êá›<¹üÉ¡ o.S2ÿüwî¾ÊQb—ˆGåä~·ÆÙ|´qÌIcœBð—F×»»yü»{<¼}<ö(GyeGWEÈÎ~È¿qcÿ¤È2×~ß:µu¿MðT‘P ¦BÅUlÀW<ô<Åîéd)©'g¿ø«V*—ufì59‡4b2u$rºCÜ[gÂT?>SÓÀŒ6]sÂö1rWÁs¬[P&MãÁ5ŒÂ|ÚÀGþ4|öbƒYÐÂ/Üöëq6p_Ãöt_Âe_qB_Àé{ÅY¬Å"‘sa2uU hL¼hä‘.‡øÜø\ÀŒ»!Ÿ½z,¼¾ë½v¾(oàV4I«Íî¼Ð{x^ð:)rHJ´»½Kò%_úÅ[Ѹ¹’ÛɃp¹™Ûp{À¹öèLŸËî¢kË¥kM³ï1·º­+¹»ow£ÿ€!Zä(Ò$…™>„8‘R¤GŒäGg¢F‘*eâjT©S©T©J…Ê©Pž6]šôã ?zì|LC —’ÿš0aÒäå¿-`Ȥ©iGÏŸA‡A¢ti“'Q¤L¡ÒÚõT)QŸ8aª©"B†Oõ4 +X³láÒ¥+®Z²\©2jò$G‰4î±ÿ#Ç3b¾pÑ‚¥ä•,\¾ˆ1£Æœ;{ž:š„©S(Sª^ɪ…+Wi\¶fÁbuj”§L”Ì2Šd‰“(T­fåúE Ù²fΘ)3&Œ×­X«JÒ$^Q!@ö¸cŽ7Ö@£ 1ÂøbÁ/À£ 4ÖxcŽä)D‘G*ÑSV‰å–^„9F™øšYæ˜a|Ée–VNqÍ’HÊãd”T`¹å—cœ©¦¤qƉkše†á¥WNáO<Ùþ@6Ô8ÃŒ2È £ 3ÎPƒ “ûƒD¡dÃS\©…b˜™¦$qþñ±$gŒñåXR…K¾ •WnLFšÈYžyè‘ÇtÒü§^ha¥O0‘„‘CšRKŽ7ÚX# 4Î84Öhã 9üèF$ÁÄ“RX¡¥—bžÉæŸtÞ‘‡žyàY‡œ’ùå–W\ÔļQT‘ebœé“yòᇟ}î‰GpþY&\^A%”þb#DÉ;èˆÃ 6ÖP#4ÔXƒ 7â CK.±O\‚YÆšÔ‰çž}–ÍgvÖ$fYT…“€;mpb-1.5/doc/developer.html0000644000175400001440000003271212315325650012505 00000000000000 Developer Information Go to the next, previous, or main section.

Developer Information

Here, we begin with a brief overview of what the program is computing, and then describe how the program and computation are broken up into different portions of the code.

Forgive the primitive math typography below; this will be rectified when MathML is supported in a decent browser.

The Mathematics of MPB

This section provides a whirlwind tour of the mathematics of photonic band structure calculations and the algorithms that we employ. For more detailed information, see:

The MIT Photonic-Bands Package takes a periodic dielectric structure and computes the eigenmodes of that structure, which are the electromagnetic waves that can propagate through the structure with a definite frequency. This corresponds to solving an eigenvalue problem M h = (w/c)^2 h, where h is the magnetic field, w is the frequency, and M is the Maxwell operator curl 1/epsilon curl. We also have an additional constraint, that div h be zero (the magnetic field must be "transverse").

Since the structure is periodic, we can also invoke Bloch's theorem to write the states in the form exp(i k*x) times a periodic function, where k is the Bloch wavevector. So, at each k-point (Bloch wavevector), we need to solve for a discrete set of eigenstates, the photonic bands of the structure.

To solve for the eigenstates on a computer, we must expand the magnetic field in some basis, where we truncate the basis to some finite number of points to discretize the problem. For example, we could use a traditional finite-element basis in which the field is taken on a finite number of mesh points and linearly interpolated in between. However, it is expensive to enforce the transversality constraint in this basis. Instead, we use a Fourier (spectral) basis, expanding the periodic part of the field in terms of exp(i G*x) planewaves. In this basis, the transversality constraint is easy to maintain, as it merely implies that the planewave amplitudes must be orthogonal to k + G.

In order to find the eigenfunctions, we could compute the elements of M explicitly in our basis, and then call LAPACK or some similar code to find the eigenvectors and eigenvalues. For a three-dimensional calculation, this could mean finding the eigenvectors of a matrix with hundreds of thousands of elements on a side--daunting merely to store, much less compute. Fortunately, we only want to know a few eigenvectors, not hundreds of thousands, so we can use much less expensive iterative methods that don't require us to store M explicitly.

Iterative eigensolvers require only that one supply a routine to operate M on a vector (function). Starting with an initial guess for the eigenvector, they then converge quickly to the actual eigenvector, stopping when the desired tolerance is achieved. There are many iterative eigensolver methods; we use a preconditioned block minimization of the Rayleigh quotient which is further described in the file src/matrices/eigensolver.c. In the Fourier basis, applying M to a function is relatively easy: the curls become cross products with i (k + G); the multiplication by 1/epsilon is performed by using an FFT to transform to the spatial domain, multiplying, and then transforming back with an inverse FFT. For more information and references on iterative eigensolvers, see the paper cited above.

We also support a "targeted" eigensolver. A typical iterative eigensolver finds the p lowest eigenvalues and eigenvectors. Instead, we can find the p eigenvalues closest to a given frequency w0 by solving for the eigenvalues of (M - (w0/c)^2)^2 instead of M. This new operator has the same eigenvectors as M, but its eigenvalues have been shifted to make those closest to w0 the smallest.

The eigensolver we use is preconditioned, which means that convergence can be greatly improved by suppling a good preconditioner matrix. Finding a good preconditioner involves making an approximate inverse of M, and is something of a black art with lots of trial and error.

Dielectric Function Computation

The initialization of the dielectric function deserves some additional discussion, both because it is crucial for good convergence, and because we use somewhat complicated algorithms for performance reasons.

To ameliorate the convergence problems caused in a planewave basis by a discontinuous dielectric function, the dielectric function is smoothed (averaged) at the resolution of the grid. Another way of thinking about it is that this brings the average dielectric constant (over the grid) closer to its true value. Since different polarizations of the field prefer different averaging methods, one has to construct an effective dielectric tensor at the boundaries between dielectrics, as described by the paper referenced above.

This averaging has two components. First, at each grid point the dielectric constant (epsilon) and its inverse are averaged over a uniform mesh extending halfway to the neighboring grid points. (The mesh resolution is controlled by the mesh-size user input variable.) Second, for grid points on the boundary between two dielectrics, we compute the vector normal to the dielectric interface; this is done by averaging the "dipole moment" of the dielectric function over a spherically-symmetric distribution of points. The normal vector and the two averages of epsilon are then combined into an effective dielectric tensor for the grid point.

All of this averaging is handled by a subroutine in src/maxwell/ (see below) that takes as input a function epsilon(r), which returns the dielectric constant for a given position r. This epsilon function must be as efficient as possible, because it is evaluated a large number of times: the size of the grid multiplied by mesh-size3 (in three dimensions).

To specify the geometry, the user provides a list of geometric objects (blocks, spheres, cylinders and so on). These are parsed into an efficient data structure and are used to to provide the epsilon function described above. (All of this is handled by the libctlgeom component of libctl, described below.) At the heart of the epsilon function is a routine to return the geometric object enclosing a given point, taking into account the fact that the objects are periodic in the lattice vectors. Our first algorithm for doing this was a simple linear search through the list of objects and their translations by the lattice vectors, but this proved to be too slow, especially in supercell calculations where there are many objects. We addressed the performance problem in two ways. First, for each object we construct a bounding box, with which point inclusion can be tested rapidly. Second, we build a hierarchical tree of bounding boxes, recursively partitioning the set of objects in the cell. This allows us to search for the object containing a point in a time logarithmic in the number of objects (instead of linear as before).

Code Organization

The code is organized to keep the core computation independent of the user interface, and to keep the eigensolver routines independent of the operator they are computing the eigenvector of. The computational code is located in the src/ directory, with a few major subdirectories, described below. The Guile-based user interface is completely contained within the mpb-ctl/ directory.

src/matrices/

This directory contains the eigensolver, in eigensolver.c, to which you pass an operator and it returns the eigenvectors. Eigenvectors are stored using the evectmatrix data structure, which holds p eigenvectors of length n, potentially distributed over n in MPI. See src/matrices/README for more information about the data structures. In particular, you should use the supplied functions (create_evectmatrix, etcetera) to create and manipulate the data structures, where possible.

The type of the eigenvector elements is determined by scalar.h, which sets whether they are real or complex and single or double precision. This is, in turn, controlled by the --disable-complex and --enable-single parameters to the configure script at install-time. scalar.h contains macros to make it easier to support both real and complex numbers elsewhere in the code.

Also in this directory is blasglue.c, a set of wrapper routines to make it convienient to call BLAS and LAPACK routines from C instead of Fortran.

src/util/

As its name implies, this is simply a number of utility routines for use elsewhere in the code. Of particular note is check.h, which defines a CHECK(condition, error-message) macro that is used extensively in the code to improve robustness. There are also debugging versions of malloc/free (which perform lots of paranoia tests, enabled by --enable-debug-malloc in configure), and MPI glue routines that allow the program to operate without the MPI libraries.

src/matrixio

This section contains code to abstract I/O for eigenvectors and similar matrices, providing a simpler layer on top of the HDF5 interface. This could be modified to support HDF4 or other I/O formats.

src/maxwell/

The maxwell/ directory contains all knowledge of Maxwell's equations used by the program. It implements functions to apply the Maxwell operator to a vector (in maxwell_op.c) and compute a good preconditioner (in maxwell_pre.c). These functions operate upon a representation of the fields in a transverse Fourier basis.

In order to use these functions, one must first initialize a maxwell_data structure with create_maxwell_data (defined in maxwell.c) and specify a k point with update_maxwell_data_k. One must also initialize the dielectric function using set_maxwell_dielectric by supplying a function that returns the dielectric constant for any given coordinate. You can also restrict yourself to TE or TM polarizations in two dimensions by calling set_maxwell_data_polarization.

This directory also contains functions maxwell_compute_dfield, etcetera, to compute the position-space fields from the Fourier-transform representation returned by the eigensolver.

mpb-ctl/

Here is the Guile-based user interface code for the eigensolver. Instead of using Guile directly, this code is built on top of the libctl library as described in previous sections. This means that the user-interface code (in mpb.c) is fairly short, consisting of a number of small functions that are callable by the user from Guile.

The core of the user interface is the file mpb.scm, the specifications file for libctl as described in the libctl manual. Actually, mpb.scm is generated by configure from mpb.scm.in (in order to substitute in parameters like the location of the libctl library); you should only edit mpb.scm.in directly. (You can regenerate mpb.scm simply by running ./config.status instead of re-running configure.)

The specifications file defines the data structures and subroutines that are visible to the Guile user. It also defines a number of Scheme subroutines for the user to call directly, like (run). It is often simpler and more flexible to define functions like this in Scheme rather than in C.

All of the code to handle the geometric objects resides in libctlgeom, a set of Scheme and C utility functions included with libctl (see the file utils/README in the libctl package). (These functions could also be useful in other programs, such as a time-domain Maxwell's equation simulator.)


Go to the next, previous, or main section. mpb-1.5/doc/license.html0000644000175400001440000001057012315341423012134 00000000000000 License and Copyright Go to the previous or main sections.

License and Copyright

Omnis enim res, quae dando non deficit, dum habetur et non datur, nondum habetur, quomodo habenda est.

"For if a thing is not diminished by being shared with others, it is not rightly owned if it is only owned and not shared."
(Saint Augustine, De Doctrina Christiana, c. 396 AD.)

MIT Photonic-Bands is copyright © 1999-2014 Massachusetts Institute of Technology.

MIT Photonic-Bands 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. You can also find it on the GNU web site:

http://www.gnu.org/copyleft/gpl.html

The file "minpack2-linmin.c" was derived from the MINPACK-2 package. It is copyright © 1996 by Jorge J. Moré, who has graciously granted us permission to distribute it along with MPB under the GNU General Public License.

As a clarification, we should note that Scheme control (ctl) files, written by the user (i.e. not containing code distributed with MIT Photonic-Bands) and loaded at runtime by the MIT Photonic-Bands software, are not considered derived works of MIT Photonic-Bands and do not fall thereby under the restrictions of the GNU General Public License.

In addition, all of the example Scheme code in this manual, as well as the example ctl files in the mpb-ctl/examples/ directory, may be freely used, modified, and redistributed, without any restrictions. (The warranty disclaimer still applies, of course.)

Referencing

We kindly ask you to reference the MIT Photonic-Bands package and its authors in any publication for which you used MPB. (You are not legally required to do so; it is up to your common sense to decide whether you want to comply with this request or not.) The preferred citation is our paper on MPB and related topics:

Steven G. Johnson and J. D. Joannopoulos, "Block-iterative frequency-domain methods for Maxwell's equations in a planewave basis," Optics Express 8, no. 3, 173-190 (2001), http://www.opticsexpress.org/abstract.cfm?URI=OPEX-8-3-173

Or, in BibTeX format:

@Article{Johnson2001:mpb,
  author =       {Johnson, Steven~G. and Joannopoulos, J.~D.},
  title =        {Block-iterative frequency-domain methods for Maxwell's equations in a planewave basis},
  journal =      {Opt. Express},
  year =         2001,
  volume =       8,
  number =       3,
  pages =        {173--190},
  url =  {http://www.opticsexpress.org/abstract.cfm?URI=OPEX-8-3-173}
}

If you want a one-sentence description of the algorithm for inclusion in a publication, we recommend:

Fully-vectorial eigenmodes of Maxwell's equations with periodic boundary conditions were computed by preconditioned conjugate-gradient minimization of the block Rayleigh quotient in a planewave basis, using a freely available software package [ref].

Go to the previous or main sections. mpb-1.5/doc/diamond-b1.gif0000644000175400001440000011761512315324631012240 00000000000000GIF89aŠŠ÷ÿÿÿÿÿÿÿÿÿÿÿ½ÿÿ½ÿÞÿÿÞÿÿÞ½ÿÞ½ÿÞ{ÿÞ{ÿ½ÿÿ½ÿÿ½½ÿ½{ÿœÿÿœÿÿœ½ÿœ½ÿœ{ÿœ{ÿœ9ÿœÿœÿ{ÿÿ{ÿÿ{½ÿ{½ÿ{{ÿ{{ÿ{9ÿ{ÿZÿÿZÿÿZ½ÿZ½ÿZ{ÿZ{ÿZ9ÿZ9ÿZÿZÿ9ÿÿ9½ÿ9½ÿ9{ÿ99ÿ99ÿ9ÿÿÿÿÿÿÿÿ{ÿ{ÿÿ½ÿÿ½ÿÿ½ÿ½½ÿ½½ÿ{½Þÿ½Þÿ½Þ½½Þ½½Þ{½Þ{½½ÿ½½ÿ½½½½½½½½{½½9½œÿ½œÿ½œ{½œ{½œ9½œ9½œ½œ½{ÿ½{ÿ½{{½{{½{9½{½Zÿ½Zÿ½Z{½Z{½Z9½Z9½Z½Z½9{½9{½99½99½9½½½½{ÿÿ{ÿÿ{ÿ½{ÿ½{ÿ{{Þÿ{Þ½{Þ½{Þ{{Þ{{½ÿ{½ÿ{½½{½{{½9{œÿ{œÿ{œ½{œ½{œ{{œ{{œ9{œ9{œ{œ{{ÿ{{ÿ{{½{{½{{{{{{{{9{{{Zÿ{Zÿ{Z{{Z{{Z9{Z9{Z{Z{99{99{9{{{9Þÿ9Þ½9Þ{9Þ99½ÿ9½ÿ9½½9½½9½{9½{9½99½99œÿ9œ½9œ{9œ99œ9œ9{ÿ9{½9{½9{{9{{9{99{9Zÿ9Z½9Z½9Z{9Z99Z99Z9Z99ÿ99½99{99{99999999ÿ9ÿ9½9½9999999½ÿ½ÿ½½½½½{½{½9½9œÿœÿœ½œ½œ{œ{œ9œ9œœ{ÿ{ÿ{½{½{{{{{9{{ZÿZÿZ½Z½Z{Z{Z9Z9ÿ9ÿ9½9{999999ÿ½{{ÿÿ½½,ŠŠ@ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠ É“(Sª\ɲ¥KˆÄPš|I³¦Í›8sÎÜX``Ï*ÀŽEs*]Ê´©S„1;öø@ƒ¡`’ã(×:9@kŠˆž9eÁÝÔaÔ§pãÊeº“ãÔ¶…ŠÔ(®orÄÉÄ (ž #&bÊG©9߈¬rSH7<‘§Aö¡ëݹ C‹þø6¤Þ ]Q´k;9Öøˆ 1¨ž|˜Âm˜÷aOiª!¦LDó7ËæTÖ¼ÜÍqæŽ}€ò+Ôâ¿Ñس¿¬ò.n8cÿˆ¥J–UªÌáyljÎ*Ò¶ï`ÑØ¢«i%T’=- ÀgÙY«$VZvØcqøÃ]G-´G*PQÚöê`ßõG nà wŸÌÉøÍÆY†Ù~ç:s¤ b7#ÎQïŠú2FvÊì³OÞU©@K[5£@-¤À†I†:' ò&Ò"ªI1„ihÄüS¶@gÐ \@µål]‰JRœÛòW‡ îÿýß4ªœ_rÂM³_)D4#c3,ÏYh¢i„‹ü0Ò*}yÔHvžmV~ù+X'ˆ+±l¢‹;½ª×b²a74öÆkÏ^í@«±µZipƒ V±:A¸#=YOŒÎr˜w¶jIº$_3¥ÃyÒ“Ke Õ&vÎ_6€ÿ[S›\ùÐÊ´¨-3+¸lÅÚèa?t«=ÿ Ž>ùy-nÁ8ätµ¡›©Y‹,c­¦)½ø+A”[“À€_Rl)H´Fµi}sÒÉ#Q’Q0 [@z¨úýÍiHL5º¨ži¸ E6Eך`ÄWj¬»2Ž7ó3=(t%enl?ø7êëªz šVåœÐ„ú.XiÊE±ùÇÚ b>ï>8Ív7¶”BY/ÁÅÑ+>†KydÏ8Ët?Î`Âp~Db ÷t"<}‘}ŒÌjâÔ6o¶Ù›€O ààÔ9cµ«sZIVå甎 äö£^°'8ƒ°rZâ°‡t>ÐJDð1âg)µÿ-‹"S)­lG6©"‹xP­œÉ>§ÄÏÞäæŒ„>¦šQ\®¨Š®@!gêt“8'ÖEz‘Ì%­Ü0 YQQ­²ä™9ÄBU`-El-"'Î}#Çú zÞ¡ÁQó¬ˆÆcÓ7PëÈÌp™ËiøÖôVx`Üè&{ÿIt2}M+ÿÀGvŸ5©ËIŸ¥Î28!¯npbUsêF.Ü‘ s䢹 ‡"bè?3e*òPXwi¨ÍúSG[ÍA¬¬Åõ»•D®ï£:ê7¹x‘NäeT&NøÒ^Hvƒô8TEÍÐhȘyíñ²ÜÇ­p:¦ÿX¥§ zЦ[ÿL¨s¬<þjÕ : X¢^84“^6¹œ3šd{èÀ8‹2Ø{CŽHW^€îh~é"o‰Yvu±@7=r! `¸è&÷ªTB´%_÷HQxGcbOG…:úÇ¡ˆ>Á¦Æ*,drà§Æ½¬¬SV¨e”P ¶š0]€ŠWÖtÖu‡›) ÆjlQ åtETÖÕµ{²¸é!Z1g9cº¨GH/âT›æ»— DùÈÂC².P4,ÙÖSªK •XÞH¹ꇽýÿ蔞'ʱ« Ö*zõžÉ‚Ã_•¥Ç ]œ[õˆâêàƒe³ea?‰<^R=àÝÑ×}ÿ¬¬ Öᨽ^ƒryúå^ ^³ßî?¥Ëð™eäwE´kb ÿäµf˜!_;y­ãc · ˜°^+ã h&‡8u(µ'µ'GÃu\B}‹2òp:÷zcY65þ0Úc‰t{ä†nû}X— ûƒ2Xuìð‚䦂ªðg1]ßуáµ@‘;2) ³RÛñž‚hîqnÏWªG"$B¬¥€\… [N£dlXlƒ‚eêåMX…&ùFW¯3u'\S†w¯´DæB¤Æy 'HŒá<·!13ç¨'$|Ñ64ã4ªGR©^$hoFPñcUÔ ‚ÿä.¿§‚¤ ‚ç&²À*Ï·‚ã ÎGn F} Y=çD"ÇžۧF¨=±a2nV÷‚)rD0Â8÷á B ±`Ï㋤`ÿ¥B2PÃ=`†~å\r·J4“w3j¯ÄHº†žzD9dRPs8‡ILó4D"1‹±/–&ß@ ¿gœ° =|æ€+xàˆ/†‚í8—¡L|Q n…x¯ñ5yuß’WF@Õ7‚üôCË3D®¢wrjhá †«˜möó4) @–È„ÑÇ3ÞöZÉf2‡wOvFô{WUy4s¨”U*ók7ÿ‰ ‰VüN…s8‡ÃGs¦“å<4ã‡ò`TóÔaBa$«ñv½ábÜæVé‘“¸:Š ‚«3n'’ÓT|È·QçkÀˆ57}8ˆPãICC‚ÿÂv ’™pcèdk½÷?4Dn€z-L±a1%;ä99÷I C +°r,„R Á¡+U'rB™¿rHWCtTD¶(“Tèr·=ïP¢0riš¨9:oð×±¨0MSmæ–J ^n° ˜W©|ÐÇ|õð›Êו¥`‰Rð{e²ƒDw7‰ :ö*aÁ †Á WNâ4¶›;e#¾,ƒܦ<\ÿ”:‰„"¤ð½Òy"D#&Å0™µo½°Š~–}qƒáU&4b²Òjé…26‚7†Üv:QˆXž5‘?vLo(\˜!ÆáT¶r#k÷QAUˆ¢Èš•ä‘âÈs¤"DÐ sVÄèti¸™¶á€ñV—áŽà&’2ƒà N÷{Ô·oˆ³-G±TBU2{£2|$€„k@z;Ciï/‡ÄEˆó'T©öWU²d"†'F'¾’Dwe@9p‘‚ie:˜D²o¦–8Xp¨pYó „Lé̳K˜‡k_¡_d#b–%öò¦Ç¡EÒñ›ƒÿÆû"¹D'˜˜uÀ™n›˜£º·:¼W åa‰9¨+Á磂ä× ç&Ç¢ 9>Ð…¹,ÏyØ©C„ãeàäk«D@ÓØ«*'±pQ'ÒHßàß Ëæ¬VEX¢ilr{‚Dæ° Ø,ø™&ÑŠq­?!öÑ•+8MÓºyõ¥;3/s°o¼ÕNÀÑj”¼uKÆšD°2D[ò6Zášñ‚ÖFCp¹v…+SUšª‰šXX7‹û ù ƒ ëŠp‰æ±F¡"„4ï¤o¥ùËY‚þt‡£#P¼oûÑi,9wj¨«0c‹73“U5aŲc‚H“ÿq¡Ð‰z47TŸ5ò–IhãÙZD+ž¢o– -¸P,{ŠýƒLlòZ4"²¨gRCó¯‡ ŽGõ1 »ÿ :ä%:¢ãSHw›þ‚ô˜Eê8"m{{«pœåa§«°•ëñtõ`§þX ~µ‚sàˆÝ è‰HÑ:\T”¶=sxëg3ø±k©Õ`)‹V 5¨R˜jP§½ô%ÚX0ãzót×Já)œAª†%©oBUöÁ vpxÓ¡¯O¹9£ûUa$;`n ÿÀ¦å'å±Rº ZAÝ>:x£ _2“ºl‘@ú9@C™T%e1H=V¸½ÿâmÐ (3’›VB¹€8y ÂZÞ©2ɨ¸ˆÁ_aNrOâÓµGHb Q`¡Æ60%h,¡ÞZ ¾+©‡E£#¢ ;È"¢¢=fò#l×·~!¤…؇㕇Fg=¦£^5­b"Ó/×'Žæ'}W&¿f $[=ZtüRÃÆ##54WÑÓvÚÊ¿Úá)sðÆ*+¡"$6×sú&qó[„à‚4.xP.« zïÑF2–­f Täbj¢3SåyZzròmmõAÝ€ ¸vU×YÁ!Eˆ˜u$!ȵdóÃ@%wá½ TÖ%¢?¤¬¹2¥:f¾·.n²&ïÿZˆÕ"îÁižöÈTŠ*¢u—5ßÐ:zò¦ÃÅÒ‰(Šù]®‡]@ëøPºy<ýÊ9¡µHÐ ˆX^†“Û.‚xŽwZÄËÉ@y‚"}2a¯KWÿé_bvÈÖŸàb¤ºQz´Q«êœò¤ĀǩLbBq¯!úhJ³l`°¡BRiÄP=Ò‘2 ÖŒî'Vh(“ˆ‹¹Òh¯'ð+±DE ÇÜèa‘OM£øp¦Ù\Ð1«’-}®3/W¶J«Õ êë¾rfa6r…«›wg¥c¤ØØJÀú›ÄðžÒ$!@’W'uå¶M÷·PÂÿñêÇÂæ_ë³xc2ç¾rF(¼“O…ȨÝ Ø¬ÒJÍ@`5ѧ°è6SB6¨Ì‘DÌ=72tÿ’(¨·‡àˆfÇs1ÐK]ÖPB}±ð›Z§ èÇVÝ“„˜Ö‚“BÊdƒÒf×h«ñê!&2½ðÏu=Y AÖzØfÔCÐOqÒŠÙ’íI­64ؓٚ½¶ãØÙ›Ú¢Ýg˵f3Ú¨Ú¦«Ú¬ÝÚ®m§üÚ²=ÛÚ´}Û¸M¨¬Uñ—¹ýÛ¿í0@-¬– ¹ÌÜÊ­Ù&ÖŸ³"3L…`¥ÂGBd‡©áÛ˽ݚD×Xÿ„pm½#£'óÇÖ[ûV8Ö†kHÂg$xÍÝô mƒ´`sð-¤à I*©ûvᢅ¶A¾Ä R²^µ`aÈ H û Sß~ÞñÝD×£!r¨"|âzšË3=¿¶RŒºH?¡/-”–#—q¹-à »]áN1ãA˜máƒ9¬T4.”œÉ'÷+ §È®ó²Ð ¹Êq7Óqzšµ¢ÏÒÃ$±‘4ÞX>œ‚ßÁ@ͤ€x îâŽï0‡1Æzt¼/rNÛ GqBXpjðB‚°^ q*.åÖ‚v]Ò£1ßYNºva)FÿãÇCòå®qh ab݃d'pBrt'™i0ë36C#ç¢ †’UT¬«PŠ2Ã%Dz uPE!F-èØQY„ö aã®]Ù Ñ‘á·"¥šé é-D‡ôç2Õ«%Ç'lRv·±Õ¡\ˆsüçÕ](Ö…¬ÿD%þÑníXÒÐH%Yƒø– ^/D¶Gg^ïz+Ùí?&@;ómÇãð?!žÍ]^qÜÏL HŸp7³þN\½2U«ý1t)þµâT;þì:\ÊôÄó •›òàH´×u1BD¤:ÌÁQ¿$&^\E ˜Xë‚H…<¬rϦ†D\Çëb-Qqß°ßÕ Ÿ7 ;ðë´¸Îiµ 5û^éÁVè@3oN¿sü’ö~.×›èÝ ‚ñÄC C} òŸžVìŽì'3+Z£¶?@[:Ft,–K¸Bú¨ÝvH‹̧Hg–ÜŸý$. Èÿ'Hpò½å+8óH–ƒœ€ ý™is ̘٠%”ewí D„n/•5oˆ 5õ¦½² n@åð䦚isšIøáœo º¹AGdbÅnxÐ=èÆ©›’ŒßðLS"rš wsÌ©2'¥Ûts j"˜f`¦4<3 $è&§§9¥lâ\ À L¥ZÕêU¬TÿeåÚÕëW°S·²ËåNÐ6Uß@âiN9•ç¬âôϦ>:‰fÊÁóM§ýÖ›· (u|Ø¢R-ÖòeÌ`+O•*ò¦ˆ¬šcÈ éo>njª¨Ó¡¿Îÿ1ÔŽÞƒ «åhøÐá47¿!Z n‘-Ãà)ÎɈ‘¥·è”L;®twÁë‹} à÷T¥r¦œÙü×­çÕcÞš+V=EdWv#•1$ž—/•ÚÉñ—ñV!¾ëN@ïÈ›j3\oÁtP<ª$OÀ¡Š£¨Vˆ(Et\RAºá0.µ:úfކÜhH§9ZM§4\lQµjñ¡j|@7{ä±!æ ‰”iÛ ¸#oì 8‡ê˜‰¸SA*½"f«ôª¤|ÈA)YXReRN$-§7`L²#£jʈÑrNË4ÐÍ©Âãλ ¹«PMÖÈáÂ7Ò°#ÿ‚L‘‰sð0'–wÞŠÅ­nX¦ K<ÈnˆÈ­Å¢òÄ'½\Šž\K4Ô¢š»ÂT3 7–1!"¾Éá¥Ô:î×^M±éd¯—«Ϫ,UOÎt *=';p=.=Aï<{jÐ#о”\MÐ57] ~"jTÄJÉu.˜ÕÈQè!gÒ·T±9æ,òÍ"%=-•6ìr°µ… jøH7FRÖënEJÔ[Üm%!*`Å"slH9áÚ/1Še0Û®¸usÜ¿œJT5œs£Ym3ƒ6g°pfA8ót²:r0åU£4n•{ ak®§EŒ©Ñÿ©CÄ£š’ª.kyO,%j!ésËFû}'_t}Ë8Œn¼©½d{×a&}Èè"ZÒ´šBÇî’|ìx·=ñ¡âf H¸ †a­ÃáÕBÕ‰ˆ£|WJf¹:Bªª Ï1ÆG ;Ý OlU؉ÅUöYžuŽÝ<Ÿ£½v*ɦâ€Ï /É9y¸Œû†£úÖé¾n¤Ñ­HuÇ¥íKÊí9lµn©…V) ¿ç¢{K#%È^>8šºõ¦9 ñ­ñÓ6G‰´§)ÓtCê›xƒˆXu§ˆ®6AYWvp.qÊwOY T„@Œà#@š œ*#•> (ƒúÓÿ¸Å—Ãh¨>œž"ܱº\Ô#…ŠØG sñBìlva‘á ­R™Êì®ZÄGø'ÆXH]³Õ’ŠÓ^Ì!IäÔr>“—H‡lÿ‚Éèâ5¸Áp‹˜Þ±VI® ¨•ª('Æ]oylÁ‡Ôv¶èÌ,aÎqŠ7 ‡pi@Px’@ Èsž¬€  È[Š1Řf&¹L$!zà„R”R‚\2)nÐÃ&õ€¦­B•’Þ [¨B’E…îX )æ ØÙ0,,“%U„@B”euõ1ŽÉftbð0^ìââfô£þ- "v;â^’£ "ø‘‹9ˆÿ Gnrct[fñš“7F1ç-hëW£%Ô$… aŸÖJä‘‘„3:j›¿F–ę́€é ú$@+wˆ„î:'H 1ðBHid±º÷Ã.„Ï>V z¤0ùÈ…E'êîòk¤ùÚãœô5ÐÜD”Š© |àE8†;3­a-¹BK›Jf§) 0ê v(‚lœZ&uDv³/ŽF¢úeô1…ø@x¹•ð :¼£¦æ‘F¢o ²¿%:Ñ!ßé@©½¥^+9!ôY³RøZHb|2ÀÑádJM\[q½œüÃ[aÓ› Ê;„n0¡B»|b“ÿÑ8tRªéGcqJºÃ§@Æ>€ÁQø|ôjI!BsZÈ8f‚¶£MÑãZ¬8æk*¤‡DsA¡Ö‡x7âÜ7»¨Êa™ ÂŒR Mn²¹ëaä[§s8#S扗«‡@±Š1§)µI×ø‡ÙSby‡,| 4‘R©Lx,ÔŸrµ«'Ë€k¡°]Z ÍõnRŠúÀqK(• ÊN†R z8C‘`<¨FÈA…W[­q=®¯·Q" 4,ò€mWjçÚÊpG1² ¨Dc–j Èaÿ“kmõ‡ñ}u+Ò¯l·Âý²‹Ö±Ñ§ø¦°zÿux¿1X‰c¦á`-!‡9íî 9P;Twn Q‡“ëu„#”… Y2©I…4L¤ŒÅKȤÝ®â]Ié\‹v!  ,{Ö`Ÿw¨Ð!ÎjÀj‘;ð`rè4޹VpZ⪜˜J›»Ó@ÉR(A+dÝK ÇÜ(¥W0Y€¡ß±€•˜ƒ#ÿ°®t˜˜G%FÙá¢p™«ª4¸FÃ’{á€7³Ù¤Iò(oËcPd#–;yï©BµNüÔg²ÒCá*WgÂ\¬diö(ñ RØ9‹!T8øC@ QÝ \»ÁÕØúÞUt‰™iÈ EçÁO~–¢NjЦ²ØÅr=ÿ5ÍLŠS¦@"0ŒI`ÃËu@¿ÌytIsZ¯ØØù âúbÉûN|„„9ÍtQ®mfë~¦«ÝãZ÷jWKÞl%ƒìŒd€€4Á¬ìv÷`<Üÿ’PL'¬Ç{(šYE<ô„î‰ÖVÑŸÄxñàìÖc³ðRÑÌ!¨Ñy©´É¢^LëÖª‘†NŠ 5éä‰òq˜°MmÍ#[KRmµúÍa PñTnCbà£øüà¾- y1Àk“w«éÆ7+Í!3™Ú!2—y1Ï^¤„Ž¥Ìñ!蔵$Ì)‰»*¾¨P,oyc>Ðe%ÒÒ‚™—7ô<µ™%õÙÿýéHAx‚;”¤%<éR)YHj¢Â¸¬"TØB>t‚È3…U‹î-/ûêrK’Èìhǰá“ÀC²fÝ……è1ªdžhÂI·­S&òÿÚÔ4’7U¤džê†ôÈ€´›Ê™ÈÙR‰÷0:²ižŒ“~Y‰jp”(kȺLŽÈi§“¨§îz‡6šŸâ)“#7ØŠÀ‡­X–eAÒ¡„ò“o‰8E!„3;!‹ÚŠ(ͪ-ÏÊ(a(Ÿº¬6„P¢·NÒƒ«Ë3Ó: #𨀒<»´ƒƒA¨`¸…뽸dú•'#y§ˆ¹† ¦Š›ò‘1Ã@7àÿÙH=øˆÆêæ º•ÇуpŒð˜›’“XB–¿»ŠGó ƒs 'Y ô¨l«£©ñ<Qž¥PŸˆsI¸„ ~ú‹ÏX8Ôr“eá“ØQò²:Æz·¾¨¯,RŠá{顬²„‰R!sH! „Žj¡‡z¨XP…ª°RL­ !Z¸”刦Љâ"¢¹™¸‰cªîœ¬R"%ê›à‹ûˆ0‰û;WÒ;øÇ(ÅQ¼“Àó8¼œ1¸ ¹‰ªÅ¢sFa7`+ðÇñ2¯6‰½cÓª€’41›¨ ›Àƒ¿º EQÈ9p‚ôÊ¡³…œƒ†:>ÿP"¡Wò69ãƒp$˜b0 ‚ b¶*bdÜ{¡ò.7²ŸN!ªÔà‘éµ¥¢Á*ª2²à˜›ì]Y½êŸvº‰¼P Æp ï¨ ,ûGmDu¸¯0¸0ÀWj<¸PÈZŒ*‹–tä÷2"Rø‡kcxT…ä[ O°1›+¤¸ –tƒ/‚™2 Sì³ÕE*ä¹rÓD1 NÂûŸ¥+KɈ åñ ñI"ûŸã""£1.¹é£¹±5˜b¹)<$>„4ª¬J›28ÈŒ±„4wÌNúÊú6P"¾4Ð07¸3ø "«óÁ€¯üú‰ÿ»rCÁÀ¹øj®g$·¡¦—àÀyRÂ;ã¨Él¼#!cý8<—–{AeëÎj=©4M®<ñ”¥Ò,O¯Ð©Œ:f37q“‰¤é+Š G(KïI›´Š£y:os³[ H:êøšŸ±ù|ñÀ±q‰HR’õ9.¾Í 3¯ð¸“DÊ2ôÄŠ@ÜPõÐ,³4b˜Þä§Qa˜¸Â*ä`²%Â.1¿i’šÎ›G´ž´S-¨˜–ÓÝÙÍ™!¦d(Ý嫤 ¨0_ÖeÞ¿pƒ½$#U !)@ »§±‘£€IˆiˆiFdF†/VÆ9`þÎäýÇ Ö­åå«óŠ¢qUŒàÝÄ0À˜bá‚X å¤&rÀOn‰h`(‚)’—¨føÞË…åo娌e­ÿõet6–Ia€¨I\­ÿàç½ ^Ð(ðBþâÚÔ‹e(ŠøU¯ºaàPkIÍž gŽÓ ¥Y†£Œ+ŒîFÓlurøþ3\–er¡”fi|q‹> °â3b Ø©9…%&‚7 ‚¥Æ]þI-¾bÅÖ¢ß6÷ î.ˆÿ• ~µ¦a“~`š‰«“¹l‡îp‚oCúéè^ô2—òr“›(V‘¯ –À€i`‰ò¹ì-šýíÞª]ñªØŒ}}©:PU B%ˆiÓéºRØ+=g¥Ñu+Vlömóö•÷žðbGwtV ÓR™á¥Y»fôvseox†~eqñÍb_7 .¤xb¦1‡ÿã.µÁ-U57+€9ÐÙÌhîÎ%Ô‚³ ¿ì¨{3og­r =–vìNɈ Îq'QaDvdÞÎmƒï§›—òXþaÖM¡•\Éø‹Öøm]7iÆ&ãVì4¨qV/uDa‘ ïòQ ™îd¸Ø°â%4$k¯Ùšªuvq¤þ–9¸M¥¦&o”IOû³êï†ý¦Îã.fa¡ofôZ––^ö`÷õ• E½:7œ›h…`Ci|z¤»YÀé“ì?îêW¢™ë%—.Uü€Ž|¡é±ÉF ŨöÖúXv<Ü^ÈY/]æ= àµn£àO!ÍsrSÿ ?+s°æÇ£VÇmŸå %ô¿gr¢•\\s¤‘—NÊQ>×çÑP‰È*k ¤pzªiP¾ãNòñ—¯à¥‘À±ÁƒmÈ—ÀvÐù¡|ÞzáøA…–P鬞ƒõ[/-6ü/Qb¨þUˆ9Ý”tÃcNJ7Aæ0$2¹©“ãÍG;0À“(°LɲK0_Ƭió&Μ:wòì™sæÊ–+K‚•Ó›RGçL»(È2ˆ!¤*‘ @‚ •˜äNж­ÓâY…§)Òn>ôÌñt4©Œ¥¬8gW®[Íô!‘H%}&Fÿø0âÄ9åá)5çqAU tu‡çŸªr‰àëiN©‹nê’ˆGÁ9äT™£¬Cƒ\¥NlêX©§4kD’Té2¨Ì˜@/nœ&rà)O.ï½&G&¹3åÀ¨ÑqÓiL‰hÏþtš›‰ÝžŽ7·`›ìm¤v•H•íÄиÝèñÔÓF7nïÇMêT£Yæ(QJY ”âÃ`Çáô‚ ' ªòPDUm£ÈAíC ANu“Ci"uàm ÎA«(4Õ@]ñ•xá¨_HBø&œƒ9êhP¿5÷£J%dãHoð\¥±_×1åCwP†¥@~‘wwßÍQÍ™ÿCD4²¹8Õ—u‘×QiPHÏéæ‘9ÝG!ÙÆJ¿í“a{úY“<±° 9±xiÐæ`8_âõ¥á—›[u,iß’oU ×™Ÿ¡hŠydHÜø'ªÄ•F`Guè烥n½A#HÔ¹™Ãskõ÷½ÕŒ”Õ°ŒßP©VwÜeTxâQD‘@ h× ´ŒÞA^Ahie)¬# ¹s7¦›\ª;õÙnƒÿÄ’K.ƒ²3zÓ(¡^†‚D„åm˜ê @GÌ[ÁEl$Q½Ù˜R8Â;1N=Æ4§'˜õMUâ=õ™F#jú–GÂ"eTn Øÿ·%”Üù°ÌvQ‚÷M¶µÍaѵ]ÒÖáµqi .‰i4#]˼UŸG þ6ÅÅ1Ø´bøÂN.ô zãe=ÛDfbª ¯›«®r1- 5Ú5eqº;Ð)«'J¨èC‚ £Ä4±˜¥E ¯åÆ2öù`Ц´nŸË¡i4MÕPéÝ4h§,xÞuM^µØ¥8­cã7Í[ñqG~ÏÄtÚǽ›ºNŒá¡9¹˜#(†¤"›Y¶Ívôž.ƒ>JÌzÓk/üI%´Û­ž¤8Ç7RTæ¯ôxP¸¯TÑZÉ,S>ùy ËJ,RF#µx“/o·Lúç÷§–u%î׆;ÿÞ]=O®ñh9ÌÁñCŒ§Å„€´‰<|çƒXB±XkH±Šðˆæ@ù]ÙøtÀ‰O(D•#$c#JQU¦ÇŽ­¨§ÖªÒxÈAŠ1ô™R€=Qì«S›ÙÿT28êduSGzs.VÒRG¿a•ƒÙ›±)LaHŠØö(.L­â"yf¿`´•0 h<ߨVöª%¹@’:&\Ø74ö YÍðašJ,7`Ò š(RÈç2íàìIÚ»V–l¦–ñ„LN*A‚\ù“XÚQ• ©­|p’7bñ•±dWŽš:‹¥Voܤ é éÌj?ÐQÓG©Ã”-‰h“¢‡èBŠ9¤J!¾x&#~^ÄŽÃa°„΢…Ó ÕPb“ò—lá>q±éÊB&D ºoŒ “™=«Ô,TÃ)"rƒ*OW-ö„¢­!FAã<´e"…ÿ$zÿ@µ6¡íjNITyÁ‹TÇ tL3Í¢<´"ER¹]3wU*ž”DÛãxôjÅ’C/ä ^{¦b9gMžIAg&-åDdK;è Ÿ"»§?-¡%qéù–8Œ8n‰Ç:œæêÀ”ê„KD9 /oÂUžÈ„½k80íBä(®„¤¶¯]dnq¼J*àžÐ¨Ž¹¦^ýZ&®A@ÕT£2óif;‰O˰ó€ºDD!ñÊË—mp!±–T°3²L€tˆ1‡¾ä"È·*¡Ýg6³3%¶NV7ìa&Mö«IÌ£üÁaâàܺÃëmsH¸ÃÂÿ•b¥¤'Ì¡ Y¨Â´[a,œÛK÷R1 ^ ©ê`ŽÊçfÎìZ‡ôª3–êL@yË,£b¾èµ¬ºû|äg¼ieR¯ô›jâ­‚õa\h‘+»WEw›È—þÒ³¬eÉ6L]§[”É__ѹNyÌ#óìœW®‹GÇ#hyó¦€Rq!Å4XÃAå¢õŠÅ>M)ÄÂÃi£qÚA³7 )48¢;Ræ,Z.³YšL&ëIï½|¹üNÔ ¦áª(;ªcԢؙ"r (,«²\û\ÞeT–ôïºp‘ø|ö“d5ŸMùêM#4oÎ¥m“àƒÿAuNÄXÒ鸳ܻIÂÖ« Êì† UAF׋ÞóvG.‹Xè[5¶4Ôä(ä`Üw\w„O‹¬ÅͶ)”›R7ÂS€>@"ÏJ…¼¤—jfî²r©pHêÍ`uD3:“ÊbLõX_êî^¼b²Ðw øtö”&²èè*$#±‘0;íy° ´‘* »ŠèÎuË6©ý€4x¸*­ EÔ#ôF=€Á°+‚+–‚,èƒ9jmßËÍ0uŒAét› \©»#ËÈÖÕq¢~'#‰œVš1nª’ã_êTÈ¡ã†sæ†ò>ÿ卸ÒÇMÑvR‡eʉÂc¾XY@añn’g`5O‹ž_é‚D¶”ücàþ³A¢=ÌÜE½'¿$ˆè»”%)w©z]ÌR ÝN¤p‡*è…ï¯;zÞõÀ‚ŠÒ. æàíó¾Ž`r˜…ÅizœíCŒoZ? ¾iîÕe$RJ×ü©ÛL­ÚòÈZï]Sn,јOxä@]˜C¼Hwé‹T€ÈUäÚT â\W0JjÈ£l…ÆE„þˆà Ì.ÝHíݦœò@<Ý…8Ð츃 Õ›9Ô‹  ½¹Øìì_Ä‚í”k€Æ€àAgˆŠ˜Å¾íÿC.¡¨RÈI,WÐrøÀÌ  ‚… ”@R)¬ßˆ ¦è˜ûÈV=1Ü7<÷(Ø>IÕú<¸ ¬yj…MUÇPùÅâ5Uø_£(–µH`|<Émp%ÓÙ…¾H‹ÕW5Ää z›ø†¡àŸ Å·É ^)D,à¾9Zõå‚~Ý>õå`.à[Ú)ßct„¼ÁÄUB¹ ÐJoøÆÄÕ¦Á>ÐIè˜MŸì¨´AE¬Ì?$*•R‹~AÕâdD›ùLSØé âSXÇŒ4˜OI‰wpÉäìßöÉyD–uƒ}1ÿÀÔ7eÔ7e‚F]ÄJ)¬½ !ÕE'éXôBðÜ^rœÁ¡ÛÂÔɈÈM!–b.è‚W40œb.ƒ+C+ŽÝ*6š"hŸ¬"ˆ/Ú‘©Ä0TN¸U¹dÓ@¬´ØFº;øQÍlOýé>\GûØÇ[̺Ïç,…ç"ž–|øŒŽYGO1Ñ–ÔL,Ò_¨™ZyX{Ä™åW­A’Qˆ¯„ œ¬[ Õ Ø€Ÿ}UJܘ'œJ,¤ÜÅIt¼Á’t„Õ­Âz‚.,Ú)¶˜*z½qdÙ]Õ¬˜ (B!F¡? EI\ÐI‡bÀ$ëãÄø€,¦;ÿCì˜ðµžTµLùøÀ?DR¦HR”ŒÔ±æ¦Ä„­ kåO²´Ì–ZÌ@Qe6ùá|‰IcˆÔù\oÝìõ‰ÑEÌ`›1]Ûsâ]ÖÉÈȉŸòEл•â‰4P,àU’Å‚„l½8[„Æ·¥D‘€BŠl[ #bPfêX&ɉ ¬‚aR¡dSp#ƒùŒ íœæFU^šàFñWû¹AuNÒ[€G9Žu<Îãääà-K>ùEoÒÆ•L„, Äóˆ*¥[ zÑ OMü’§ÅÊàøÌ]yFÕÝÆŒNÝ}$}Tušè©BÜ!È[˜ÅEÿd¬€l­B£Žý]Ûsð‘@(†`_È‚¸AÈ'O$P/Ñ'Ô”„d8ÚØU_NDß\ÖÉàá­51”S8Í)ûlVPˆO'- ”,ÃiÌ0ý]Ë)˜åøE@Žã86ÆŽõÎH]©(î]ÛE¨X9F+0]±˜Š™Ÿ*@h²X]è5Æ)ª–˜Y|FÀá¤ÒGã ŠPIø@Ù ¤”ÒÉ £È¨B.ÍOØ'‰iñˆ„3Q£ŠŠM'TNUç„îƒ ËÚL=åfâÌ–ûˆÚß(UƒÙÓiEÉ BËiù v¬h¼:ÿ~doОp\mЛu‡µä\´uTl^ª¿ÞGeŸ¨>òѬeÉàÃJVL'æÉµY G‰uƒí¬‡*èB)Òì šâŠµmf4P¸ÜŠŽQ¬eotßÊ^sb,ÞQg…áš@T\z°FÅќިJä²V៸eƪЀY¸ØWÈÇÓÿ%nGeìË^`É?h‹šÁP•ØNÛȨæ:yßœŒŒAi‘ˆŸ×&$ ©§¥æÀlFЉÍ!Õ` –â :!¬íìТYÀ ^Þ™Þ–©”èXÖY®èÙº™%ðyžauÍ35„ †™wM‹*(GŒ@=n£qÀÄ·m›®ŠÐÝáÑG”h,‰eÝô@¤wm¥lP‹˜æ‡æÓÀS­E(Ú ”¥”B'Ûj'p°ÍäÆ/Ǫ›ÇÖh˜˜øÚd,t]>„p£‘°;¼`‘‚,†ÄÚ™/bìÆ^*$ño+¬ÀøFäUYˆF']ÓzÞ“¥PïA„B„ÿ/£¨ÞÅ1)¹áøÕÈØ1C/àC/ÈC‡zÎ*Ôf% ìU¯]þЭýP}´«^kHÁ6¤1_¸BØ×ÖÄ1àÜu8ÝœY¬‘`l žD§ TL ï@¨°XJí ûPªßíì‚d>¨bÙIrÂ^]~ÞE\” ˆÞ¦KJį.‰S0©¦:Çv¹WˆFàb1{y£)ûÌxxB¦ÐƹåÅ_èØ¹ Çó„aô‚?¥ÕBŽd1R lY@„»’$`ÅEM冈ˆÕ›×S(–¾4Js ·à˜ÙÌ4‘$åJì Ÿ J('B‚íc‚ÓáÿÁÝlÌh€Þp²Ü¨«Î(hŸªfÁJ¤³n¤™J²~†ªBwéä¦Òñ.Ö:Ø=‰ÇΘCxü¡¿heDyZøX®Y]Að 5„^ÜMcE B@3Hh•¡M/Ä4>Ô1ƒeÚ´/™D¬\D,ÌŽ.,VCÌ,dà#j×9ËDlƒ¶Ôöü¯‡‹ÎU LÁìFº¥ž0¶‘[Ÿù2ë8—û¢J‘ÉBšÍîÃzÐFF§tN]8ªM­ä1pœsÊ»²~ÀêU°:ÏÙl[Ç®ÉÔÑm!®G,ÈB ÇN=@÷¥]g²btŸâw®ê†•Û'+ÐgÜU4%…Ù¥¯ÄÙ&µúíÞ¹ þŒNw¨+‚ÍÐèĈ‡k9H  ™›óä*:DñĚ˳„sÍ´hû üÖI)(‹unCO^¢(Äh~P‡AŒ‰ò(V®p\õ‚0¢Š\´ÿàîŽâ…^–_‹MúóIdöÍ`ÚM0'¤}„’Šw\vS¢PC¼W³}Œ#͇µ"¨Ý ¡£…ŽVvpòád5E™ÜyYU`cPVWðŽ$¸‚8—a³bûN¨gª†¤DÊ e”Çÿ½àH:…Qd¢°‡<'®¼ =1T-$yÄœ…¢H¼['܆íBÙ†ª3©Ú-²òÑÊ]4•E„vœ‘H›3y–&Û¶’Œ„RhPhª®ÌU5˜æÅºzs#þ„Ò›uY³÷"Ò„DÜ}KîˆÊ8N”ö@ÄE].ÍJ~öcVB<:㫪ètóH `Á®ÿõ*p‚™à/¤ÓhæåÕ±xY¸([TuI®àE™K“úÁUî m”¾':`ÈÏ—6ÁEü,žG‰ciå‚ÙæuüimbÇ|F¬õØvk-„›d²˜>ªÜ’ÿA„ô´ c…Îù€€-ßÿIˆU‡A¨‚å¾Ã~ê2gþx°*éL[¬ÜLÛ° 'çôÌY…‡Ô›orØ  Ò£XÙ2’ã ž¯ÿT¹Ë%« *YŠºÉådŽT)±sºæ|3Ò͸pØ@ÈÙg‰ ­ÜX(ÐÇo¬É‡qË%?YõW¡ i‚¶©zxpa߇±'º™H)7õ|ì(ÓSžÁ=È”&Óâäd—§!›tN’@|<ÏÔ²Ú¶ÛÙFåþ|U|V\wŒyhxõEô/W7½ŠÜ‰•+v§:2­sÖ ù¼È‹ã<Î6+°38ó 4Ï’;Òbò„0V™Ãœ9d!â YÄCsÂmÜ(jˆ¢n¸ªˆ¥•N FÏTÁÿǰ03Êt4j½§ÏÇ ×#FÈ"©"ê±ýþDï…ø¡}£Ub„FñM1'YcSëÆXss(‡]WÊí¦RV5C¡ñB:ÃŒc3m£¨ç˜=nIvY=”Ñ^»ÈIÙVêQn+“ç2ÍrÐÄÅä<âH0ù¤h™æœ¢V™îf¯cSb9ãüWDaQ)&.q´&T«g<Ðñãt‹é€ õÛ·Ù"Æ;Õ]¼¸uÌŽöÆvÀgÁÏàz1&Ž(äèD‹l+`Û@u#h¿NÑ"ÿ‰0ƃb¯ý5-LàFR0Feì ÆÃHrãcžêHÏlدbÝüôÕÇ*-RKz±?Æ<óiû7ˆaŽ÷j_š†ø466žyüÛ«r 8„€ÎDBÃØ¬}‰E&xP€Îr£Ël )å[ŸTZ¶A–Ëm=2‚dQ—Xt£Mb›ÐhÌ“^ Ä eŽN€G„eX¤"Á âN$8Ã!O6¼ÍAJŒŽFœ1ÔŽF–º:½xâ×ÖÁðP§¹pG,ê¡EEL£M‚kÈÞÆ´bØA'òºáïr°Œ¾ ‡À{#FNTÎ4BûÊC1OPm|§™©(•(‘‰œ ÿQêev£‹ìPE†Š×*ŽO0ÿøïÒÀ?ÝøÎ† ËAñäØeìæT¾Ceß4ç*¾­:ŒI”£ÙôÕ—¹lÊQ„ÒÈ\ÔìТ*¢Ñ¦E!‚ºV“— ç$c¡Öh‘—,.¾ (t‚&œ•‘35›¥.pKržsƒVÄ ™ z@2ä %‰ðÃi,€BšÝJn&†$ òN ]4Púà-œA¸yHt>T‘!¬ŠPr²Åw“¹8ˆóG¨kB."Éq–ƒ=%È@ÈVJÿÓR¤¤—…èLij•ë0I‹À ‡"ê¡ Š¹‘•)©JÈÿ¢ ”žçFœÝ 3èÄ'š³¦Q•ªU€RÄzÄ"ô‰9‚˜ªë9H=Kd–8KB– ‘PêZ×*ѧAZäâ]\3‡m.æb­ÜR‡V*FÑ­lì`Ë9Ñ ‚zQ!Fâ¤ì}­¥L [Yˆ‡¢üÁÑPRæ×†Jñ²¡-UËÙ!ETëhYÛÚ©¤¶*°UÝj][[ÛR¥uV‘­¹({[ßþ¶-¥UÊnÔ[à¹Û!.q¿CÛä>ºÜ)­pc›Ûè^»CZJ^ÅÃÜì~¼Í-Šu‹bÜðž½B’‡wÓÛ^÷¾¾ñ•¯äAÝùÞ÷¾êä.~ù;_ÿûöÀéeo€ œÝÿ>åÀVðT÷Ën-¢m°Uµ€_زÞ%RÐÔ£tø(P ¥g1\âZj˜*‚),L”´eÅ&–1"ü(àÆ %Ð׬ ¨™ˆ2àRF>[Q^Üc¢L =Lè1r€„HÆHÖ2ÛjÌaZæxÇ=æ1”ƒÜá3T9ÿpƒ•E|oÎE2rR,\”ÐòÎirZ¨Ðc+à]N€r€ ÑбSPgGK¥Ñ¦õò‡i©ã´ð8-A&3¤|@À;pBš pŠ9¨Ùiþ4‘ÝêíDz*nîñQö €Zÿÿ9-\ø´®­ìˆ*»¡s°Iñ RÀà fÁµÈ\ÝlF·…[:>Š¥€ihúÚœÀ@eKä`Ô–˜Ã)Òì†Sp⤸ƩI7hò]mf¶³› kI7ªÉP~rûœë]£Ù×HðA-Ê2pN˜bð˜ƒ)ŽMŠjp¤@¸r–EÓã)ž4Ž{,âLÛúÚÝÞ6§sðí$”ÜäÖ¤©ÿÁ‰S¼[ÝèæÄºÓmì!ÑžNK‡«b7ÁRQqzò¬m¿‹ hN: Ît˜" ½pÃÃáÁ‰j`xøF‹ qR4Ø>x—”‰òæáþ\¾sNÏ9N¥Ìÿ!·G­®“¯<Í>x…þ1îwÏá˜ø‡'Â;x@<)Ò uuÍ}Äh'pП2ô£¼+-R~ן߅4S¯(x-’ l7@]çDê«1ut=âT/6×­Ž9úÏe_äü¨w¹«ã=öôÜPwpç]å~¿ù)ïòwÏüÔ37ü3 v>Ý×0¼öÕÜiZ>˜*>çýeÅ•£è^Ê™”#ã4;áÐ)/‹éí†Z`ÂÀ6&XïÖCÜꎾÁë¾ë´®!îô MÈàÎ^müZ«ü¬B÷:lÈðñràÌíñÞ-åøÎù–¯ù^®å¸ðÿš/ðúûVp¹¬O“r®ÇØ+(/ÉiÍ)Ä 2ð€ˆ€ÄÎ öŽÐü@Ø Àç€ôLAïØ0¡õÔÿüÏê°î YÏõ°êîÿºëíÀ ’®Ã°Œ–‚+¿‹¯€oOZáÔðáÔÌNOÝ–i°/£Qð0áž/šúJÐe.eîÜúÎ|@ç8q’&ÒQ_ÏVOõþoBÛÍQ4"A)µZ%V^¯".2¡Nô>ó4KµÃDtdO•Å@UYV)@)`õmfue‡Ò¦-Ì.ãntÛ®l7ëpáN-)‰AÿôVÁæ.2ݱØO뤒ñHZ‡VI³1™T"³ñÌíÔÞà@­øÐõ\Ï4]=­]Õô]ãõ(àNY´GpÒmŸBN'ùµÇô,=ÿúMÛ ÍH/ôšVAbc!âTb?±imÔ Ï ­Îÿšv041á!A—"'r™p&TMÊHeMÖÂR––X¶(TàeëÕGfqÒì¾ô^Óã(ÍÂt̬m̲<çÎ,ùN?ùÐH=‡ŸÒ0I‡V­±ëj®ùª!æl®º‘.–”Âá=VÁRïÝê€-ÉÕLAÎÓÒ0 mÓ7=×)àf·fa–måõdÙr•íüмê­-âÓâ@.-–­ÏÐr à ígƒát1TàAj-×p ô´ë—aóï5¸ ¯bÐ15Rcÿ!n@1¡æ`?×TKôdEô(P4u[vuc5<â)з(Tô(TÕ8ŽììÔ–`“íÀì(tä°ÍÓ:íø¾Í ØñÝ óYßãߣI—$I—4h¯Qæ®O-$ÕL<0ÿúÎKñ¼Ýô Á—ïÂV;×µ|Ý5=ãµMÛ׎‹‚^i˜)p2ßõMé·Žãõ<Éö\-á¼-ø1)dÉü·ÇjMoxÍ€û6†îé¶áb¯á¸®" “@/ׂ[Ïú†­O²#Ä0C#‡Í%ÝÀNoà€ CC6UiIe]\öUg˜vkX˜yey¹…“™…;Ì×ÿÐPïð6ßln/Œ¯j¶ÚÄ숵-‰»t‰Éx÷ÎeðÈqkÝ s[©8¬±Z³õjõ =Sî+˲:ͲK©3ŸùàKùY;¹Æ÷Îæø]Ù÷^W”u÷)úx~ÙWÙµlŽÁ4ÔT®Z. €(ä2)¦9»^“Î^*= ¹Çxm’ ø€k!þjaHÝ@êLa¯.Ss"1!ô+7h#óO0“ÜÌ‚KßTAõϤlTWºdK7Ee8˜õx=pÒ˜U·(Xv‡“ª—ùC;ŒK íåhºRñÀöø ¥9Îl¬6ÝŽW³òÞ…‰KΛg°+ÿëQúJð*±/J¯æ¢ö)£Áx•’{­rÕ¬SÇõK<z䯷¢ÛÕ~××+»ë4<ÚŽÙ7%š{l-;Ëåšv)USøYÞÀ)ù¾YýÒBÐ6ïóªLï¤qïd9 z1TÑ 8™1Ãp³ncµ±N"%¶“]/Cs€ŸAµ©AwtC7™[UªÙf±zUiIUItt½Zt=T¥E›Æ±Ñ)cA˜r"íÓhصÑëß.Û>Žø¬l:ëNþþ¡üÀ‰‘Uð‡o,Ãm¿KùH0¯gÑ \°úÈùú ÜœÿZÑ­¸R]¸4¯È´É·< š²Ý×d4¢Ó÷Ã'z|E½ÄE;;Õò¢ÜÝ­Wαµhߣ8ûÎ,蛵•âÏ/…»¼ãÝ|ÿtOT>휻÷S-¹É} –‡ óïþ*ôàx± !N ]Ïá#[ïÛÏÝêpë t"뀛`:—K–…¡Úº‹‡OömŒE±ÜÊE7¼«üÌÍs¥ñ2O’à*”!8”w½ÍaÁµqàŠQФ¡’ÏóªØ¿£'?ÍWñ4iŒ-ÍòðÖYÎÜžïÐ ð‘Q£ï"ÝaÒS<ݸ˜²ïÀùºÂå¸~é7ÃUfÃãõlI]ÄÏÕK½ÔįóžÃ²•ÿá  ×¹øXÑ™ÅoZ³qëïÓ_gŠÏË%ð€€pÞa÷ê‚›Ráîïqÿwñ«.»ý#gÑÁhñîa±!®{‘ÿÎ$3SÛ¤;ÌuÏw¡]æ<_8™Éü«Wºó>í¨=Wà›.3s`3S’$Pû"³ö’2§Ór«+2*Ñ(­ÅCªÆ¾Gžñ6-aÉ8[ÁKA£›—Nñ&ÝðÊÒµòÑÑqæâ/òñø£ûïïêÑk{Ä= }'ûŽÚepòÔ=œ¢GŽ; :±“›AŸÑr,ò,±,ã1zƒ3j—´Š•Tñ~]iç€ÍZÒ€À <ˆ0¡Â… þkȰÀÀT$’Fæ ÃúXß¡SµŠÿ^Øîû¼{û6¸Ÿ]‹-ZDr FHÜðIóˆ)RÿJS'‡ŽúlUÕ=ÿƒù=§ðã9]ïæ¦æÝ°?åÞÍ)èiNåøWŸþü>àó·ÿ~ܗÀÿì`UÿÀpР^Ü0…ýõÛoyÍPa‡Q¨A„ >ä„‚o¼â'Þ™G{Õ¤xM‹œì7#tRA§"t˜¨ÇÞy=ŽÇÕ}ÃÝ6¤ý£È‘±ý³Mvÿ •ƒ%!W—p^‰¥B»Õ•EQsåpGqÀLê̦’"è˜Ô$k,õÓJ¢…F„M 5ÔTO¹QËSåàX-„`¨ˆ@/Œ¦¨aÈ 6i`kýÕ—@dÉ)AÂ@* ÑZ –ÖYŠ6fÕ ÌáÓ79±k¶¶$Ó‹¹º!N½õ“N-…cÝiªK‘ïÄÚö)ÊÄEy5de§Öþÿ¶¥DåEÜEÇ%€@¡Qä¾úd+süƒ"ì‰wØQgÒxѼôHÔ™Wžxÿ`²Ÿ|>à`û¡ K‰ðC ’˜p‰ F¡ƒrQ(‘…~] цf¼1…r98A„ï` |î¹D])ê¬ÇwÖU礛2_CÝM@>Sžœ|³.KëÍlÒu#±[Ò?±¼ Í-Ÿ²®FböV-ÇV3´í\ êe`ß"ÇD¸=ë"nˆöŽ «¥ö<ÛtÃZ,¦Yg'-­ÚMÀú¹d‰€¢g!'‰˜¨ FØá¦Ö© j}5oŸ†*Ð Ž_ XZ‡CêC/HYõ³Uxÿ½ÒG:¡Së7xÀs,)L¿™¬J7Å´SO?s)ÙÝ©¦Úª¨³tÜo²~ñ«“b‡%×Û–‘?ïã%J”EÊmt=–”Kî>dãƒ÷ì™3‘Lž¤ôÑFÊëä6¢1‰3yßñ8Ç5îõ§ +¬= 1ÈA X„Jæ L(dŽÓØ´ ç1`l€T1ÐAÂ)ÖðLðhG@z_iÆsÂÔKiï¸ÓØ…w­"iªÀW)Þ'´|ÅoN4ãN4àõÂxO;á¸rÄ<Þ8zÏ{ˆEÂ-‹0É [X´‘Sø y~`Šj᪚©…Ù!ÿã•¶“¬éNlÒI5T‰fàŽ|”àgÃ%niYK-µ±¾¼e ›º’—½ /ÁÜâüˆ8Âí€CJNˆb·ã‘n6«;!<І,ºëXrDÝZø ¥ÌdŽ@ 'Þ”O®¦5Å+ðd·DÜ%ËÐy­‡„ 9ê¢Äøp¤´¨¦Xîàž:ð!h<ùN5mùh /Nïjš6‹ä¯{íkE×X—|”]þc ó_ÿ6€ÆÓ€ŒP+2 ³ Ÿš È"’‰h ûÏÀ2qŠ~ _,“Ÿ*®!3›TgMC|— `(3'Íf<ž{ÿÞ·J­ç†Ez¡‘š& ô‘#BzCØD d¨jû´1¦i‡9 b6sxLÁR¨‹¤HJ-¤ƒ‰WБ¯ZîÂ!"Ù¤–g þ”µ™cŒŠ/[ËYŸkd°ª*w\ÕaU(¦…OGÁI¬`õ3+“îVv£:¬B·o¯†nR ›ôÄ+N,¦2 XTÏÿô¿‚Q«X)ÒËpsÊÿ´äfˆžÑ‹7©#NøXZÓ¸9Ü´šíq‘{<ñŒõØ<‘¦p*$ l¬~P„Â{ÏN/0Ÿ ü´¢ÝRLîÿÌô<ÿQ‰í@õ¹Ïtx¾`Ï®õ5pä#<øK¾Ù g°*“l¢Ã¾ôÅ6û+ÄŽ+b÷ʶ¿v¾ÚgÃûslÜM?1tuwd˜Xs«å°¸¬‰')öÓL™íפ¤aø¸ª•“â ”Åȃi\Â%¢ÖÇ­5âãX>Ë•ªât5Ë(Y‹ŽÖ 4Ÿ£Jgð¨B)F)ó·lðÅL;¥Înû¯²Ší&;Z–kÿKrcs¼#|MV œ@pb"Viñ€d&ð\‹#HÚ×VJw-LW{!º õ îuqâ6N‚UCÔXïálô! ÷Qxs7Bk6 ;°zmç\ô]t§wÁ]1„z2§Æiš†i¬çÔÆáà ÿàXû"i\×^Ž÷u×00æ!v>ó A?â”/á3–g/ðC#Q¿ƒBðåX(ÔyëÁ^[¸.>àmÌ5PMˆOu燊tw¨Õ ! ² $XèfKjd€W…:u£ø°öAŒò7º¤(˜˜Geat{tqAà'ŠˆVÃc8&qWh%d‘dÿ;¯0­€XX4vrXhvo?‘+iЋhF¹’'ÁÒW:sruƒŒ´b'²#+¥“¥ÁaÌ8Œ8ñ2+WŽbpŒCc™’L´W{ø° ±Pì°ä¸ æ0M¢‚fC¯00ÿp0 ÂN®–0@{˜jqG]Ÿ–tw%G¸w¢„Lèv~'O¯†2÷á þâXÜ‘aÅSóÓ/ëbké#˜à/œÀ3Q(vhøÉ0yfX†9ÃPphCþrC@â#ìU‘ÝQˆ00@еiýH„Mǵgnxˆû0‚‹ˆeÃC7Eå<—¶‘‰H¨8€Š¢Ø}SYSlÅVâWÿcä׊”q“”R!Fwcuhs›Çfs2oø†o\,rÄUsÄx“uŒÆ(4ÂB'ù7'ÿçJÀ,O¶—urL9P}7&l¥Hƒè;‰gø x`䂹°nõ…3C+4mª§òä\ÑUAŸ6„¥È1yQ)]bΕAòÄ °¦=õH0Ób,Ô4ùhÛ0yï#l*’3`ø‘bÈl>ƒkÅu//9iyy-C’¥€/z +·F‡—7#V>Ô1/A¨:jÎŽF «  $¨{«¡Yk"bk”o>` 9 q„ñC¦˜Š£jx69áw9ZyŸ„Áÿ•vÅq0t‹!ª£bI"7VÇn¼ó T&˜w£7léW¹—|ED1 —¶C:}u;Ëø–ê€h©eµòˆºCXñYpŸƒ˜] Âtò ˜!>à ª@覈¯Ñë _òp\sº$%ðTøÐ„ 9w¸ŸÐÓO ”š¨]Îåšú¸z©'ƒ4Ò‘VióìÀ_’ö>Úl&i’+ã#õó…=ÃQíEœëBB!”‘¸V§^hM9ÎÙ§$ µ ñã›Ñ bâ M§1ÿxàf]ž§E Q s°é ™A’JTQ(-bU2d*ò€9ÜÈVÙtWùŸsuÿq­x8¯*&÷qá‹`YNÊ<¨!§e¸Â¢Âsðd)7Y¹Ÿ1Ô,|B&Gr$7 —Ðê¬/rŒ?#¡wó3*!¬ü(‘ AZnõŒŠp!¡H ô¨À˜†aR>P D7«!â±´vm×\6é ßåi~è‘#y©–¥«f°É0èT0¦ #8a[Ú¡Rðò&Tø>ýEy¯T Eœåv‡F’uØ#8RDO2²zª§ìõ¦OB’"Ä’iHlø"’&i/’#üqDŽS°¾ñ)Ü…¹@W ¾à©pŽ3‘êVã °EsP¯p³ÿ õ£>à-Où‰7¶}‘˜7ÊVheŸ° L‰dx´q†"‹±S­6Ñ ¯¤ æ°«w7ÊâI¶¢eo„7(§¬Ôè SA¾ØdWá¬YáFQð°dW!±~ÅUZ Ùeyi7Ù €G!±Nâ =åú¡"}Ñ8%#VÈR-ð®&LÌ>Çä,oà·àNMÊi8É!N{5¤æ!ôôw¬g¼¯&›ü³™Û¥ú‘"$™r¶…B[$æs_ë$dè0CœtøxÒÙ#ë±# y_ø‘0b¾á…,)œòC†Çë±wèm‘ò)§é®YÓw©V"”ÀÿN9 Uás€@¼§eQ””¤(#c€}R‰ª‘ÀV£HpÁªX8‘b‰ìqˆ1«„2ŒqfRáú6U®JÅ¢_ï sQU7w—5—s‹ | ­@á h­˜ ŠÛ*&GŒ?œ"zÃD<¬+÷d£“¹$ú3ƒ6>‹ZŒ >¶ŠšdIÉùF Ós°±{Zõ€ &‰0Od°~¨1c{,9Õõ¤b´ { þQîm}\C~o0Ž÷²<43ú…4î²>ÿRö•½;’£Ç#o`h]ç²0›¾ù¶Pp*`þ¢‘ë’ é/ i/ñ“ ;Dÿ’”Gy’·/]Ä`Rg 1¥A´ý^¯™¾àAi Î2BÚ-Q >P s£ÈLÅ%£@˜p©Ø®Jô<Š4q7æªb(Yf’‹rŒÛL2ñÍgVŸc†ñ˜ÄÒ6Åbužµ,f‰–jB+Æê~€RfhÄL&e¯ÔÊÈuÄI¬¡Jo¶sÄ€yÃÖhСeÀ9ðºÝ©%»aº7d™ãŠIÆ+Ç´#0¡Yz ÌйD!$0À@‚˜!Âë]Kè¿ôh õ¡œb‡C·¸#$ Rž`õÓ36]B9“±ýÕÈØ± ½T·%y4k§ihò‘¾îõÿ™— ‚:É•‡³yklÚ/02êu†ã!’3û/>’œO¢Eѳ³Íòòp˪™jRw]"·àAn .)0ÑÓ@ æ ÷º.Éœ;¥âÖ—ЧK~uuWÉórK:£óW ÊIŸÔo¶;Å:'½âdÍ4±sºã&r3/­ÑB¸ˆ¡/#±™¡‰û3³²¢¾€½ÊŒs™Ð‚Ke¼HÜÁ­ŠÄ ­°²Ea㊣Vü8ãWÑš ‚ð¸ȇ ¢ñFD‚·«™º· ¥Ø´÷)Ÿò³V#/ËZª ½¬¾³S±¹$ÑCa ‘èY¹uÿQÿ\ßàÈÄRQ‹u›ŽÖ>·¥›%Õ÷ƒ"=’"¼ ¬Ã.µ ôÕ>u/A3’ûr§_èé½â+§A½¾*[PmÑ"˲ԅjT2w]@l\"À?¨Ô– ê¥"™zk#¨CN‚ã(ÇL”äWà 蚕×,IP,vÉÙ›G<›U€µdc Úe'D°;péŪ³Â1TUKƒ_YîeÈ8\QDÁ¯”y ­]”~F¡ÍèÏÍ––uÛÞ胮¸Á7ÐZ( -V€[2ѬhÑ” i¡KÈ¡EMáX‘x@Øš5 ®êˆ8‚¹ !=ˆKÿ9ò0¥îM×2>PÛצÊC=$Ó;ý ¦M"$ýe€*„ÓÑIh¿>½åCÔëÈÛ”y¥Àuþáãá!$¿s¾XÇ–_¾îÓÉ$+²SmhÎr?þÑîá,Ðáí‡æ*Ckñø ÓXš×k E&&’ r½@z\•:‡õ¿e,. t sÌ’#7f¼øJcŽS9âäµ³§¦ ,Zt31aµ9æT™‹å.Ö¾\î€Õ¶^½\T¥~U @ìX²eÍžE›­<µmÑ{àlp]X@ºgÌ<󯿃ý: ‹øß?*y¦ù—æ”›ž®qúÇ)fR›ÿuæ¬s4t¤þmC§êôÀÕªQ›F­šÜ;Ó«¾™.Õ°²gË”3]£ÌÉTpCs>ë&õ s©ož*ÃTùræpÆ;›V•ú4:A§ßÿ©Võ.Öv×áL“mþó3Ìœ®Eç49rÏ9׿@±þÄ*À°¿´B¥NñÁ˜7^™c÷Ò‡ˆSÒÈÆ;Òx& M0ôÁ¨ 'jÆ Sæ¸í¶Ôœr§ª\ꡇª}ò±ªvꉥžUdÄ<þq«G}äñG!Ç‚K¬"h/Lˆé®—Rz‰‹Jj©¤¬ œ8š7ªÁD4åúf2Íä3“ÃUn#Ó äH9¨ J/µp)ÍÍ1Ê¡!0+Ô¡0 ”"áÜ€“áàñ¤FbÔ!…ª¡S8ù /t<Í.+íŸì0;ÙäwÈ1Y;B‚ÞF´˜‹´—á›p¾ðëGÄ û‡G=Á> |€8eyJHì8ýæ)Rº9•nåªYV¹ÿµ3µn²[]÷a‡p¹’Q<ÐÁc<Þð!Hy'WKr!$ëH͉Kì—NÙ&4j2Ñ_±èê¢0J]V£ÔI*F%m•)1×,“L:O=³w‚è|s÷1yçô>MU•R›%UÇ!Ù]ÕV¡‚êÜÌ8kGS9ÚnÛ^ Nr žXÄSTx¾ÿ}UT ““‰2 ÉV“pIŒ®ÖWüù6¥šŠJƒ²>%žoD%*Ü: 9rô”ìÌmqªè‰ú¦ŠU‚O‰Š ¸’"éâ*U‰JìàƒÖ!,”CáYâõ£#Ý rK¾b‚¯±|I&áÐa›9læ ÿrðñ0Ê  2o¨Z& ³J'=;J†z¢¨2ÏDƒdóXÐBEž¬B;ªðLgZÖ2ʘê‚p“ÐÒ‹4nñxŸéÙœžÖ Îô,x@sñŒæíÄæ4“&ä#™°ägkºÙ 6¿0ŠP(±?øà1 SvVD޹ƒ“U!ÇÙñŠG'²à4Ø B%nP©‡"R¤•zà¡¶œC+r€Ÿä)f 7g$ÎÓ˜7t€üp£oÅ‚nKA•ˆÚ |4o8°»¦Ce»…ÌaU˜8«¢oAwð8–œ¦·8àÝFLÂKVð™ÑT#€ÚbÿAÚ*7q§Ÿªp“·ÜD?Í¡{jJˆ:ðÐS¥†{ßcàùHõê…ӛ™ƒ¬Br%™À„Gù»¡þúW¿“|d#Q8Tá ®hE3z)7KrìCŒTºõ”\*ÁqeÂV+|:SB5jV¡ YøÄuèˆ\,Ìã-õ𠵓ŽE†˜—v`‡ðÀÔ4Ïfäa±Ì<£k˜¨Î<ã㸧cQ ãÆªsœŽQQe¬ñbm´ø3©Y>ž„gTá6¡1v±®‰›wºS²ìXg®„•ØÀGÓ,M6ŸJšj8ÕżRfô!ºV˜°µÖ/b*ÿÁJ,¨xCµ”s"—²ˆ+†› Œ¶R¸®À”F„ãJÓ 7¼‚A%¡Z‘ËÜ¡¦ÀC }­_–ä—¿œ*U)gÕ 3«JK^Žy¤$ 9ìdVV Áë¨ ߘÔ?ˆPO"l&!µ[ÅDN©MgrpG§…dY¥ŠSªP¥Y3i¶Rå<çœRÏ~O<â9«ñð¤àæ•É¿à\Èú0ewF´xã¨<“è9Œ°éZö÷‘6‰¤O*éI’Ç(…o” W„±"`XÅpÅuQ‹˜Krk¥ ÂtK‘bm„ ‚F|Ð]_úÀ/< \’T$ÿ|ˆ˜ä=&Y\(×tµ«b±€WÇB¸ f„è VdtVtl£:iå„ V-|ðåD$PÀ/ï€æ/'©Î\½aÚìf~g®˜çUïy1w¸È ÛÅâšÌ§ìM¡ª:UDþâAu“¿õ¼Ô¥ÖÄ*|†“œ þ“8s§Š„Fÿ*ŸÃûF ²¦>5¥q[ËͼÔ|ÇNN±hRº(»¡:ÒìúT%ÏR¨ DõÈ”`ÂãúÈ@¾†’žœô(—Áî+WšÓÞª+Z‰ò>Ê%Œž5]> º}P ’ ¢%)P’ø|Ãõþ»`ý¦\/n/=ÓðÎÈóVe¸÷òR‚práfÄðÅ’†òÐØ¥»6Rĵe±ëËv†¸îÌ:c«Ÿ6WÝĬc˜ñ„Ó¬ˆ™¦Œõ#ì©“¦²‚<3uÎ?ˆø$BF2WÛ}+ÃÜÊ0(Ø‘@96c7ÿüQ6˜ gß!°àÉcDá†fMðSÿIáLoj®±—ë·ÄMâv&ä€9@Œ%lûtè%ƒQ3Vý}w¼Ë«j1¯d¡yi¯,Ë¢¥¨Ø†™c1áA±2Q‡ø/ÍjŸŠ{ˆæ±C©§0 ºÚ¡¸‹²öñÀˆ°žcÉž3°ëI§—£“Ø€ŠR„ïˆ9áYŸk‚Ô1ZÙ¸‰Ž@›‰ûÙ¨)¨ ޲ ©Ë’ª+2žHŠ/Á(LqŠnÈ©*Loá ª¸©ªh²­(pÙ 87^‰™H‰xñ&7àø2’}ë?w!¼¾›!ô:/´H’$–¥’±;œŒ81Â9ª<Ìø¹ÿŠHûGœ™‰“œ±<Í£ÌxÝøÓ½:¼²¦a¬¦a=Ç šQaµÚ[ˆÈyÕ¡… ?CòÕâå+›çkŒYcˆEgk ì Æ¶ @…4°ƒ4މ`L1‘ãA—œB<ùŽn¸)£ª‘šRÄQ„}È%7è…90„dƒ>Ƹ$ÂŽÈbC‘ šÃ~û¿ò²;j/7lŠq;qŠÒ@Ÿ{°;ºZÓ&uÈ„k*HŠ‘"ªJÉ&{ªJ¡JyÈÚ1'm1'ÞÁHèðdɰÜù³9šC¬…¤ÐA‘8 ùi‰(‰ ѱ» ‹»˜ Žº±‹ÿp@œHÒiBÒù=£XÆ4Hˆ¬ënùr‡ÆÁƒ³27 <…•ƒRX©É%RX%Ø…]BÉ—HBô¦äX,O„Z˜ƒ_J’‘Ãwü‘x¬»ô‹€ 8·8’‹˜—3È#ÀƒwðBZ¥™SC{<©),–‘ŽL˜šÅŒDÍùðù È0¬Ê@LL=Óˆ¢Ñ¼Â+Î̫Ш …j,ðȵ\ƒÝ{EZ”¿CŒ®Q$G"¶ÁàÅc 7‡š!‚u€«þZÅ¡TÆØSÈeä¾nrF6Ù­9ù)¿y‡\štP‚¦2Ë[ŠÎ[J b‘eÊ\ÿŒÅ_“<¸ìø"íp{¶8cO±°K±yt»©ÂÉŠPzŠm¸  KŽc÷ù‚tÈ4PÚùŠÐ¦ÙÈÅž'»ž9!CÁŒT'or96‰›¬•“XIú‡Ë‹‘Â’›@ŠT¹(å0™+‘9)<å0"h„8–û:2¾ùs *vê7˜®M»¢…ËD@77à‚ú;Ò§CÉÿ¹ˆŸc0tP„OáuДúƒÃ¶¯÷L ½ë·€ÃK±(SÀ˼ð‹/£¨ìÆ| »™ÊŽh¸u |>áó·bL™¹ÌÒ“´X»™ö°™Kœ¸&Ò ËÿJWÛ+à ‡Ñ Ì#ÌØ4ìP Ê Q0JêÖêb#6 h>ù+cx ¹ ;Ý zŠÉ)YŠ vâdž"ˆè1¾) sСˆSCt¨ƒtcC7x??À p÷S&`­ç‹¿ð|6Ý£<íˆAÙ Pâô ¹p!0Í»9 ¸ù ‹P’”0‚ø ó»)rpQ«ŽŠŽDižføµWÁ¡CE:°A„ €ŒžŽ$'áAØ:90]HukÃ0CH€mºå’* œh®…|Tü2ºéb©s±BNÙǹ©ÕnÐ<°›($…á`®yÿÂIø^ª’®\º#Ì’-™Y£¨± 2Ëø2¸ <³áÖqK`š»”Ú¼ÀK»¬ÚÖª„h¬psù–hHTÅyè5Êd"ø˜8C]½N5ê "ã0½—Ô‰™ŽRȽHýŒéˆ†ŠiÔB ½¼ŠÛÊŽ_ËH$×⿘MYüÅ^kËÐ ¥¯hü ‘Ù­s‡VÒ\%¹éÌ¹í¢ˆ9 ÖŒ¨¤aÍ_€¾[äf]|]û¸š40ß+ÜÉîøvøŽÙë¢j @0³™©¢VéÖ˜Ôϸ¢ôèEeLJÜ™1j«-¶ÄÌKÄ/æÂ¥¤ÄÅEðáa-Öª­`$¢lÀ½ÉÅ›ÛèW½Bb`³«Â\¯mÁ/uxƒkâ2Ö9ðÙÿU]Ùâ­é^Äš…qE‡¹ÝÔ”£7á#T; !]vD³²XË6‹’oW%¹ èݱTΕ3œƒ]ðºë…Žá0ˆÌVÁ¯ƒøx•Åú‡ái98ÉÈ›”´@%æC±@pÒÀ÷Až[H/¹ˆà‘^1å¦à~‰‰©€žJmzºQ¥%%Ù ¿™;—t²›'”œÜ øŸø ²¨KÂ$„.a×yÂfA•ûêK~r9O!…n'"Ȉ’HÚ=\!P>‹Oö‘5€}±K¿è 5 ¾hðD _¸âbŸÎŒ´™˜íûµ`c]IcG:6 þ˜·cœŒË¸Œµ ÒãXò ¯[ͽFºÉÕÑ…éä2-!¤C&Ö62| FñT€d«‘ë5ð‡©¸Òéöˆ=Õð”ñ(T䢗uƒ2àJxSZ±pO†öäÉÉ ¸`’VåÃæšHÉ,q„À‘s±ß‰Xäu˜ 6Š…¸¡¡A9ƒ±?Iž­zr„Ø’|Ÿ¤(–¤È^xBÝ6 ÞŽœp/ˆÝŸ˜´æ-—`»X ‰ Ø)K‘`*Ä®CœÞ2  ƒ™ë"ÿ‘gIRš½ì¶ãÊ˾ˆ^@ óî’¢`”ó ÚÎgŠHQñ9Î9 (A  §ÐRý•¬/›ÌqhŦˆö‚iêÁˆ¾ÖtÜýÈ„!VHƇÀ¢ I ÌŒã£<ÚYè]Ô˜,ÖC³Žò<ŽW£Dª¡Œ†™ßc˜wÅ«1Gü¸ŸýÆ-¯-Äxêyëñìe d¡,…Ú©® ã".w0.¤Œ…éR7&Ðß4 V´Îè«„€ë‡áÄZõ™L«¼º’”‰)s >NGã¬Üåk+ýÛ£Ð2m!rƒ/3ìóúRÅpiìGÊfËôøé Þ’›ÿtzÙþÊæ‰P}ê'4â'Tì§C‡zM'M•mBfŠ }6 ×9IøAÉ!¤g¥óà” ‹U²²¶Ë’ƈƒmî¥ 7ЉènNˆ ΩOúZAk²«h²¨X)E8ÒUpƱƒàA1Ü Dï“0ï9:æ"•fòeœGwLf¨ÀHMfe©ƒj Ô¨¹QQ·‰uIhiŒ3K˱ÈówÁ‡^Ø7{—…þ‘x/±elXhy`ñ‚¯ÚuñàÜËX+õØ¢J¿Ö]Yè£>º†® ™MÛ™›¡ A¢ŒVŒkX¤EF¶ûù)¤^Ü%õ…ßø ÿ9Fc|¶ Ù„ìó5¼›§AÀ¶}Hò([²r¦ÇùŽU(K6Ô_6L݃™­i³ƒ~ÄZëŒP䌠y£ð0ѼYó1÷™¨é4dÉ]LÞŽ­³ÿ#Ìàî8põ‹yw—6‹ò»ï‘=H’9© ºx]Ȉ¨]ÙN›¹ÙVÐÂgŒ;'Ú§ðùžþæ'M1•jÐqRù•í|æˆ!|Ø“8u—¸£æT/) N³„rŽÝžQ€• ¯–1 àÑ B¯Û¶¹ŠÉ§ˆJwp#>ÈðN~ 2bÑíG»vJW‚ŠÒúzEÿ í¡ñ“f¨u§9Q©ÔPwHÿŽ£~2“Ï=7÷‚h¸û!ùbh3º7òÒw´Ð{µèó~€€•ÃTšoxЩ Gê)|¤þ{H*â5Nÿ8U³È陯k˜.~û¸Ï?UÕT•Døº‰ÑÞ Z©rÃÑ®MôôoÎÅŠ=yú8•æ_šS9þåðà'K›>µàÌSª¦à€µV§•vœšƒo•:NòJµlùSÅj˜Âq2å¦Ú¹n«ɘ‘!C„æH½Sä.W=zî€íc·/Wâz±ìårG¤×œVs%Íq+)€J¤zvú£u|z‚(ñŸ µ)'ªÿBG26JÚ¯ÿmCë_¬–ÿðÔTõ')Ÿ#oÛÎ’\à²Þ¡”¥nbÜr4àw¦Ü¿ƒ/~<ù^øˆá#Þ»úö À €S>äúU¤.6x´¡3TV7œ”E—:s¸U q'è(ñ)A×Ò;ä|ÓÛ6î¨Ï„Jì×ÒtÕâáNê`"—:n€’F-9Ø€#Ä( ô‰¡9nÇT¸ cÙ¹]Žô½Ê~£Jˆ©bŽ  H%pœðµÐkMÜBF)ˆ_± 6Xbû ÆN=ÀÔCŠ,‚좊,98âƒ9 r#\èÈ#6Úáe|¸ÿá`FÊ “% ×`l`ZH›ÐÁÓ[‡ÂÆ`s”ÅBÕà1]€Q:ùŸ¤z(¢0Ÿ«ìµ«¬ä¡×Ë?ÄÈCLw³¶7Œ[†éN,æX oÊÆ–­ölD5aI]“¬ùFJм³ÛKÑíg“jp]ôÏG˜œâR§<¥SNQÅÕ?ón…•VTÝ ÀU–@…B­CÊtºuk;ƺ³ ²Æv£Š;«˜CÛ_e‰Ž˜¤4ŒP7’)H=‘År¦"“\— n´ZIðêÇfÚ)¥-DxûO YääÎ*‰Y›oÌE'[J(á‘QDä²e‘'®iÿy´sÝþ£ˆJª‚–sÈÃ*TñÁÊ«ØãáJÌ?æé ^/c‹_|Nmç‹/|,ÇÐu S·ùg±¨nˆ:!&©“´À_Âô…x³Kߥ6)jƒøA/Ö¨§Ÿ9Îk‚¿ ‘}’Nf¾‚&û æXë;LN™Ç²±›£ÈĪLÃß* M \”±èB&bôÈ¢Ä.x¬â9 ‘ÃóF–þ'9ôâ†\6ƒ‰¡K’â“ "~%“J¤J~K}kÈa…™®%9\ N ê®>Òûvf/xðá3¢`רf@^¥;é9 |,@\¯%îð˜íH1täf"ÿ±`ÕVœáPD#PsI&4Ü(k)TI4Ða³Ž¨ëî€hZv†p_öÚ¡UêÅ/§Pb¢È8ÖpŠ9ldjŠ =ÖäŽ%æ‰õ É"#2aÑshI+HQ 7”´P‚’âT¼Z(Ax€" øÁñŠTÞµ”…(éú‡'8ò:äŒ\¥ÈŠ"R–ˆ¸7ÙšŽ"cB´•(‹#ÔˆÒØ¢.Œ¨+ápƒÖ*¢5º ™>TqŠ:@­¢ØèJò,ð•áñUÜↈ¹cd¹@Bø&ALJü“PZÂÇ)LÄr›ê£($)Kõ­?ÂáÿFæÐ ;EsHÀ?ŠºÑŽzâÜ‘žòt§t)‰!ÝÀâ>±˜ÅƒMÇ#™bÃ&wîr—‚XÅIQÐb¥˜#|ðÏ€N>h¸€MZŽzô±ÑDa”ƒZ¤…œ÷ž%ª%=+Uàsaߚɨµ$nTΤ¦ö’ùSE,rÃ&[ôÅ]C{4MÑ‚L1‡ZÔå§n TâsP–J]êwÜ&@$c¤haØqAá D…»Ù`LlƒŸH‹-APGˆŽÚ\K)ôÏ?<È“Aò¤öùÇÜ…Cf+W™cØ™ºà;0E^‘Q74c!±Y…±ÿöAŽwªéxEÓ>èAY袺SE@J 7èá¢>0„Tæ„P¢_œ9Tø%~ÍÐ]x<Їâ ð·œ$´ ¹ rýÖ"ÑÈYMZh‘ *r9׊ ´ÜÒ“¡% ø(Jð1ÛéEk‹<Ü ”îò!¾8@Së+§´’©Œe¬(6£6zu¹"É:–1åÀƒ[—zÇ[Ê ¸4c·˜, ¡ ôÊ)¤Iþù <±¾ •¨á¥(9™2¤ÐmÇ››«ž9ð ‹ 9Ø ˜Öù±\’ ‡ùXe…Á˜zV¶ŠjÔÅ>áX€æ©U3š(Ðá^À@ŽÑ…lÿÑ$]ô°ðÐ^G«8, KDߢGåƒ8Ф§‘¤‚æRûÉŰ"ÆÈ<£uøÌ2ÒŸÆé¹÷dG½lK{ÕëT§ÐÇ>vØbdÝÑD‡áW9ŠÜÍ£¦•×X2·—ÌéELA@«&ƒ´È*ÂÁ“7Å9¨c^™’¯½Ê‡ŽJj• (E CDÝÐ$"L0‘ɇ9CW6׊±¬eC˜ VÆšs`hžÒüÓê’ëP8!”xºÏŽîº†âÝLâv>Á„O†+\ˆx{i"9ä6È=.áfËhdÙ—þ¡‡ï±ºœaŠRŠíW¦H¥ ¡¦Š¯¨,ÿà=ÛI¯œe¥«º—©N¥`sàa1$Y” ¾Yj`ÛZYdÚ¢9£…Mƒ&Òð ùà‹9\ja'P8G£cJŽ|µa›®Ç¥9gDŒÎ¹ÔE±¸$SdŠ~b&î#…¡¬bÓD8ÉIyГô¬w§^¼Á§ðÐÃpàQŠd:¹ãiX‘ˆÉ¸ûŒ=E>@áÇ©ðJQÀñž–¨¬¨»ky}Ì}ÜãPæž_´Ç;Þ“ŽødóÏî=$ø¾ƒ¦>¥à±êÚ€„«§ÎíÉNvò^ƒ4¶ž‹˜:Ê5Y¨Dg5ô÷X[=%3H‘-²wÞÙ?¥ÿ†ýnÙ½[KjTàÔJÙLi`–°ZiÈ)N1ò%„p(wŽi§9tÑ:¢û™žï ™.IûÆÒPÅ)–¨«vrЉ¬Â7Ì-IM¾Ú‘$:º?Oš–[á^ì" ÇG Õ’ 0Òj0"ÁFK8Äpàƒwå€<ì€RTðÕ¾5V U¼Ç |ÀqÇãqÇ|GØH,¡‡±=ERÉ籊LɯIÜ.Ñ„À`<àׄH]¸FY©ÙàåIÎÑG›‘S†Ž†õXž0E‡!BEŒ…Ï^ˆQ—Fe„)xÉÆ4IîDŸ¬¹ÃT Ffá,dV.È‚Ò]@ùTÿ@¡žœÙE±§<Š:ôF¨0—KmÜ¡ÌÅê`ÄÚ à 5 &Êä„„ƒtÜ¡â(b!"¦œ•‚5Êì`Ξ¯xÓ…É{´Àw€ w¼Ç2•®˜‡ ² æ‰ÇQqG«8@Â|uKÒÕÃÁLH ¥ÛD,„º¸Aíå‰_ñ¢R`åU€ úŠg”Æ-P[´‰Ct¡Bt …ò Å,_´µÅ®_ ÄAÇí¸ `Ä‚e|ƒ ”a-„¡*@F+(œÌ%¬ jù²yOÄD育°ÄD䯷Ù"¹ÈŸF0 Xå_OøãX‘Ëp¹D@>„Íì#ITËÒp>LšC¸ÿCÀ…<ÔÁ+À-A½ù"0îÞÀ0º p"䵇‚"­\^JºÊQ9Å´‚¬‚¬˜Ý ‰$B¸ÔÔÔEñ ›ÞçaâÀ&rGãŇVäYÏ)ü\øTNÍÔ5V"Hø`É•¨“‘‚¶Ä*¨‚eX-@ÍÁ*Á*¬Q,ðTŒø ŸÄÈÑÔ—È¡nìe\Ì;Ä ä0ÉÛ…„‚”E÷ â÷,å"!’]À2MN &"C J¨,„÷̈½‚PÍaØ7…Ž&ºJã}à+™"Kª&ylGçшHÒ]‘_”Ê~œ#ÉÕQ< øÕÿ‚ÚGb…Hr‡rG ÐäÀ¸2MÈ?PŒ$=ˆ—d ‰\cµ\#„­EK\Ðó}%àC½¡¼H]S+ –g Šð!…ò™K8̆JXÍn¨>úÆÓPG¶¨Æü9 ÿ…¹øM½Ÿ@^\P¤EE6DD>„(%¤EÚ‡/ìËü&Vh@p€¾‡ |‡ (•æ­¦ä¨x¨`ÙAàN}Ieî–É„§õl‡bâe",Þi¶ÍwЪÀžeá? KŠîÄa£ZlM–ô…*ø”:áALú”yÞIgÐéàÉÐIÝœÕyàœO…ÈìÍcèÉÆ¢¤ÊÿI•ˆV6¦b’Õ’%ÈýT“ ¢‚ lJbªŽƒx©öÐI´ŠŸÔh%˜fÀI^j†h¢†‡*&EÐuK.q£¨`>x‚\üì¢ Q`¾€¤HÆqªx8P°\Ï7ÔA“|Ã?@jÝNÐLŒ—¨vÚ`F ƒNH+”¥\f°#G‘z¾Ì;ED²‰qÔ„¥ ·ÌDqé§B:䊕@vÒ¤nüå”ÅÚ`üî|ÉÆ CP­…“}ƒN}ƒEufŒ`Fô ÞŒŒÓ‘XOÎÝ ’%‰€N˜dÈ;äBÞÄ$–ùGüd&“Nøè¡“ÍÒOØ¥àôad†]žÂ)áÄE¡à Ë¡¬6!ieI†(¢æ«œy­ BP\`ç–\nªfhH¾í§rí¬U|HEôœCX,Â(ÉÃx¥_¸ ¹E­šÂÚñéxú@¯€/lÚ¨±ŒS°Öz*kÉV%£¥ªÎmKdÕµ´>æL"EÔßüa«µf«³¹Aw¥‹<EëÁɉüî–ëºÁÿ:ì@g Gr…¾åK¼Î+Ôë'²$¾~m¾¾ÇQµÊ?Y?9Ù˜ŽTàÂÆÇ 0ÞÜ2P|dÇiÙ4I7üõaQâàZ¡:¹ÁÈþÝ]V]Ê’ÓJÔËjéé”à%ÉØ«ð_‚ŒÄ~üEé1˜©|ìϦ©ÞY¦šrœª&h”:d”‹L°#ˆ\/ˆFEiÄì‘YÔàÞhei~ò.ï +ªòêHv@P”¾ˆ% Õ‹¿½mº ¨Î€I²SIÅv‚Ø ÃÅ:ÆÂBfÉ&©È°ù¤Q8niÈÃʘ Ûæ k±-íÅæ>[´õÄ¢EZϨ„m<Ò=¦ÿº}q‡ŠU'q’íîn.¦/E`ÍñÑqžØñu(EjyT蛯èrh|o¡îëòª0 +jvÄä_Œ~Î{hïÖâhÁÝ™•ZÆÞ^ÑZüŽÅPlP}X”ú€éüëšu°ˆa°*±2gfp,ƒâÊÅüìƒ “plPã\ÈúX Ô¡ù(¢øÜöŒ‹PðÂïÕ¢Y9%ý&ìŒÆG¡v¢"‹>¬5+ò!·&\AzA ãÛçwä0KúŠkJªF t^P}lx}»<ñºJ>ô®ºÅPìóN0îZ›XÛ³½@_ÄÉ(¶vÄ IM Å„ÿ -G¶\KþOÜĤ ɦ¥2…ß`ŰSœI‡„š¾o^é°2$wh…6‡G®Ð´¢z-¿ÀQiE|ˆÀöZs¿¢šðªÆÂ’ Ta½Ü‡™rŒð‰)keh]Ý…TH 3ON­Øˆ[ÌϰJuHolÐFld\$êef˜¥Õ2‹ødŒÔ‚à93Q¥$o‡çeÎ4ÜzâMs‡Mûu`2°Ä‡çÄGLóõ×:ÕS_Ô?ÂA §Ê‰WføB¿Ô•ÌðÄ[Øâ!¦ Ô¨NðQ%m›n)Íq@Øm4Π¡}—¥ÙµXÚ·f+:.»Ü‚ÿßï9E8sJ¯´Vü1 ô¿Á-ÀÅÇUô5Mv`;÷xò!Óô…f‡€üCL†—yªlÕ=µÕaJšb™†O3 W=€Ì–ŽÔÇôÅHPŒÍ^ ÆIHIý,ùX¦Ga’Ìþ$ž]€çÜ5è¼™7l5›°67÷sÓt"ß4òj`|ðPÂ?ñå@±Û¥æ‘\Áqõ ©_M\̲ „Z¡DúíãD|²Â8qà¶d‹=ÂD[Õ9È?|]>¤ív4g”ôn;p÷IWàp£4œ“»ŠrÐr/¯l5K÷òŽb–Sºù5…‡†¾-Hæ Sx¨I.•Ÿ\uI$äÒÀDxv¡  }:Õx®Ž›¢¶APÄD´›b•DŽ“ƒ‰ ÞC#Ä·2„Ö¤‹/ônK’#ùpëÛ…6¹ñ·¡~Àwl•­•Wz¶gy5ÿt—3:êSÔ¯$ô(ö¼4ÙdÆÝ„™Ž‡È}—ˆVådY‹ˆVŽˆ€s€ÎÅõ¹N²8ÿÀÃ<¢P]m˜‹æŒ¾G£;ÿ÷Z³Ùh{Ä[ó!ïõ ¿-^¸M SØÑì¦Ñ j¤±Y½x´¦6r!W¬CtrM‹ÍÔ_€h¢ ðM)©BŒÅZXdxE S0û’ƒÎ³Ü{ }Ëp‡¯pG¤§°Ä3}æ©æ!s»«,,¶l¸ë‰$XoOÓV“ÐJÇH”4é/­ÏXó­Luœ¶µFÁº¦">˜e`ÝÕRO^3¬«üt–ðߣðƒ7ýà/r”ÃmqÏ0°öb qüñAÛq‚æŒOàLoAË"á##%„-‡D l€V⃶I×µýÃvI×>Ãnº¬ƒ³kXøBø>Ayùqÿ^=;IBù{\Erë¨çë?\9áÿ¾‡ïoGž€¯lÊí`‹¸i“if¢âõ/»—ˆùü£fäÈ9#Š€j”˜ù¤2Ÿ’¡?™Q˜Œ~»O7ü%7xàçtñÛÿwÔÿØd²¯ ÂÄ@ Êq*Ç­4ñ ÌñO!C‚ÿÒ@„xÊÍ¿7×0ýótÓ?Rá:FùOdÇdáHy 7G¥It)·©Sõ/æÌmèfF{7S–º”ªÂaÂlj|s$ô@)€J–>]j ªSN¬VpÀd<À(à@[­m#´M+—n]»wñæðOo_¿ÿ<˜paÇ窭à‰›VsL¹¹æ#²º9 rÔJ*fΞ#nv£SeNÕæ¨;=©o¬]“jýz6§Öè0ÍÆS[÷mR>qÂS…Nðo¿!»ñœ9‡Ž €(:.XÇ®=» x7+B.¹bÛšE¼Þ.1yÄØÇ—?Ÿ~}¹øâ«U‹Uz+=îbAg•n>ª#y8¹&¡N‰h£Š<ùBŒþI°# +¼&¥“Rú¨£X)¥’<Ò$t:D¦VQGTùf&BT+Ñ y’'‡©®À’µ¶@+®†ì*H±n( äú@.¯ÚBÏ>ˆákÊ+±ÌRËÿúô ‰ø˜£ž\ì&ÆßH©†˪ÁDµjFãÄ”ˆNKƒ4ÔÞLm5[ã3MÛ\Ë-¶ÙE‡µý&ÑÝHyi§—„k…uÜÀ¬˜xn»ëºÛÎ;ðÄ …¹@K½-ë?TYmÕÕWëÊ NyÃ\êaÇá¶ùuHÁh¨g.ä¨Â2J% ™5vŽ HB)Z–xzD禴·A‰jiÛÆ§ÄŽ0 ;C¡,JØ98BPØò-´¤³×›êÿS8‘ÇWr8f€uáå*.®¤$ÂîTB³Rò˜@|©eyv˜!ÈD}£ä¨Þ™–(ŽáCMor'šá&L”n„¹9MnJèAÐ}O'L]ÆLA„Z¸Á9ÐÉ‘B5ª¶ì,,rQ‹âЧ@!Ñ0ˆŒ Z Â’“ ® Ö¨ß`b{z†÷0±ó%KkºQ‚ŒÒ6*&hŒYÇFêGF¹Í~ñÅ–B‰• ¼æ’¤¶NJAóH-10:9(ÅdÁaHŽõP„;.—šÁ†Oòèà IS™ÒŒF4”…^Q)刦ISŽ(gøÉÚfÕÿÑݧv§³ó ¯J‚´å-¯ðÜÁ«ˆÅä–+ARQ(ɽGFó}±AëpCƒpÔ _ Å æ¢fÞ ²£øbG#Väø.hj!œ |H´?â’íÔ‹ñ!Àxpäô&èv˜c8)c“m8(ÂÊl&3­E,ÕÔ9Ô©aul¨©fgf7SKðzx¼Zº“£]Z˜à¡Mc¤ÓÈq¤/AòÀúnD«4L“ ·ØunÑM9R=êéºä¸®§`,^¡c\è(²´…‹+Þ=U©F-³ªÃ#M*LR˜#e )>æäIæ$ô¡Ò¡Žÿt8ŵ¦–¡jj[Ì“žÄ½gªuµk[à©$γö4X#É ®**lâH>Ú˜H($§Ké)V €žjÅ @¢£VèhÔq ©g™ [Ú¥ ñ®¥5í_ÀÈBûXZ` ¤&Ž˜”ò «Dq»®ì¤5­è¼ÙÍÌÒTµSxC;Üi‘{W¨æ¤ÐÃÌ+\ b°`Ç3åÑXÉöè›_*Ë:þm¼Þ%'XÄ‚³€ÖHmù!¿H›\ù*÷/UÅ!~Y9Uðs’IZ^!²ªUwèÌŽo{—`áo–îíÙ:ça Ûeyj±ƒ dØÁÖ3¨€ã^¸ÿû]°`ÖH™5¯wÓ«$¶¨%;m¿6:a›ÖˆwI-VÁDD•¢R ¥_^é)Þ…Ê­s!nF ×/Ϙɧ­±]¤3OZÌá5¦xÃRÑ#¾X³^A¯gS,'©E´}„UŒ›œf5»@pžê€æQÄmÅÙ\Þ €¸"ù½ûzêš=ßåÒ彺”³—À[GÇåËhI±YÆÜ^IÃ긶´„}Bz<èä˨dY\)_ñ½ô©#,½œ*;àñŠXøb´¨…½¢%µ«*j]Ë8¯Ì%_¤Ôg™z×Åæ5`NuÀS »UK6ö³™œi½HÛUh†öµÓLmr»h;KÎÆö·ÕÌí¶ˆ›>Ö÷¹×Üëmk‰Øèv·¥ŸL¼)åúÝõFµ¶Õ]˜vۛߧ–v¼Cï~¼ØƒVµ`ä±o‚/\×yíÅ_¼Íp‰?Ûxùf ¹'žqTãLj×øÇ¯DƒœäÐÆxÉQžr•K5 ;mpb-1.5/doc/tri-rods-eps-2.gif0000644000175400001440000000265612315325376013021 00000000000000GIF89aS`öÿÿÿþþþýýýüüüûûûùùùøøø÷÷÷öööõõõôôôòòòñññîîîíííëëëéééçççæææåååãããâââáááàààÜÜÜÚÚÚÖÖÖÕÕÕÔÔÔÐÐÐÏÏÏÌÌÌËËËÉÉÉÈÈÈÁÁÁ¾¾¾½½½»»»ººº¹¹¹´´´®®®«««ªªª¨¨¨§§§¦¦¦›››ššš”””ŒŒŒŠŠŠ‰‰‰ˆˆˆ‚‚‚€€€~~~{{{sssmmmllliiihhhfffbbbaaa[[[YYYTTTRRRLLLKKKHHHFFFAAA>>>:::,,,&&&### ,S`@ÿ€‚ƒ:Zˆ‰ŠZ)„Ž‘’ƒ)‹–:““ššŸ£„¡¤§¨M–ŠM¨°£¦±’ž³´žœ´†¬Š´À‚•½ˆ˜ÀœžÁ¡ÉÁ·ÍÀªÄZ®ÐÐÏֶ͹À¼Ó¿Ö¨ÃÄÆ´ÈÍËá¥êÑ«ÄÕì±ØÐÚÁÜÀ-P–RG" ñNiXbiŠ“tœ”`ƒ+–®ðx°°â¤<®X²"dC‹’L¨ádŠ¥%¯@JZ âˆKPZ8•oߢ~ÿTJXð`B>Œ8¨NŒqôh”H’&¡lꈥK˜2iêãç ÕA<D¨°©Pˆ‹$RüºéÆŽÿ¿>-y2%[«/Åœ9j€ŒiYF°ðaÚ”™P]PÄF vÄ€Ž?^€€ ,Õ (”°¡ “fPB…X’©ÃEHBŒŠ’ ±ãy€D‡0“‹@ˆ?và Á 7Xô°DÅXfDíõaðˆ,Ód ¯õ—XàÁ…‰N|jqãÇ‘W¾œysçÉ E“6Úy¸Õ­õòšÁÌVÛmZ³[o¿7^Sw\rË5—tÒQgvÚMÓ[ß…÷ $~&[éõ²,î9™d¹Í‡™fœyÖT~£•vZ‚Ðèl<Âb`/¶á$0 úœÿp“EhrÊ1ç†ÓUw*ÙmÇʇ_…HŒx£xC 8TÓK9Ÿtð17`0ECÄ œ¢€ >T…R0‘ Äö kVÁç-p€0XPAØ8ÙLà  TpAq Ì!¸`„I&!±‚žÂA QC©Ž"Í;vÅ:ɬ½Àcë$Ä %QÄÁ®£X°Zj„ !¬E,) hZAþå7AÎæ&€T`ÁÀ ÀA C¼dè4p9X(äÀÄKXTრœBÀ DS„…_ap1Ot@Š˜½Ù”™¬ 9 Á¬l—°§‰šlºÉÿœrÒi'žzòé' ‚ª…¡R ª(£ŽB*é`”Zʤs™nÚ鳟€**©Z˜Š*Í’¬Ú*+T¼Ê3$¸²¢ëÐ`¹“k­HÐ믋;lÓŽ‹¬²ÌfKµ#ÑnJ­sÖbKà¶Ý~î¸åެºê²Å®»ðÊK¯½øêË/Uþ,p˜‡|3Ä‹(, Ö8 àŠ. Ž´ùfœ½Ì ë(wæ¹gŸšÚ …šè¢´4úh¤¶|)ÌÒμ5!6šlΧ®>ˆÏ®NNuÑ–Ý4î‹èŽôÓ½H-» V¿>ŲÍϵ´_ç¶Ö©‘í-¸´ˆK®¹k§ÛÛïjï¼õ’ro¾½ì;XÞ½>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿY‘âdI’$Kþ)\Èp¡’ƒKžLÁâ…Ì9xþZ©¦MRä(¥K™6‰åTòŸ 7Yâ$LD”þaºTi¤FŠÔGÏ:sâ¼y9Μ:xöøT(Q#H“DŠìÔ‰´¦L³-i·z“§P¤L¡ÿRŪU+W­X­JuŠ”¨Oœ4aÒ^‰;¦LšD‹•Οºuì—lgH ŒRÊx«˜—#HB‰%˜`òO#| 1?1Å|4ò&£Åg’$0‚!ôvcŽAæ†dÆÙ‘œ‚È"=xÉlÿ ò†Iü`¼›hÕm’Ém`äÇ ˆ4‰G yB–'ñ]B $Œ2H,µñSYTAJèµTR)±TRmQÕUvðÈ!}¢•ŸŒTR%i%BÈmq!FoØÑÇ ‰xu‰&!‰ÄÉY’4rH {Ðц`Ìš1ñO™cN>ù˜L&q\ñO›L@ÿQ…`˜ÑZÒˆ$`q"]'š\2É#‰|iÇiˆñzüAH"ŽHBeHWf¹å"—òak”ÆWLÅ]%‘SMõåDUdÑ…Lb´è!Œ@¢§¯W’dR$ 2ˆa‚…$i™üƒH`0ÄIhñÆ ‘È %‘8²"…âÇxØ\‹‘Á!wèÑG „  ´˜€8š&–üÃÇSñS ÑaÌóQB"#èµ²Š*¨”2 (ú¸ÝŽø!)#qò_võAâ'¢rJ*«”4+D›BJ(ž(©´vLç'ÖÓ–ØÖH"…²1À çâpÆÕQr€ÿ²Ùs“T²£„‡á„@ ‘…‚@òÏÀfS¬–—ˆ)FG ¿(re—ef²d|¡Å@O€ªfSm¾ù׬^Œ‘†Ìjį¡UÖ¤m?²ˆ!˜nÛ-\„;®A§³é&ëRÅ»0ÉjM •A èÁ7qD~MT‘pܱ(´“<НŸ&¡d yÌÁ§ž6Qn ñ†}À!ÆÿhÄ<™Šäð–2ˆá \ЬP…VÁ Wȼ†2¤¡ q°C³4ƒ£HN; YK Á•…Hâ6pKæð†5œa `肯ÀÀB ZèÆp†«Ð!}˜Mmÿ"ñˆF0B‰@Ä!–ˆˆD(‚AžyT'@!ŠR˜â¨Èâ)L1ŠPtâ0„ò •EX‚ÿ KŸªsÚø Ž`Ä"’¨ÄC Ottzõ ð˜¢eUâÓ'¾èˆB$†ƒXKET¤§0ÙþtÂF̱Žvtâ"ñH8B¡Ù?ñIÂzÐ ¡OdíŠYDEVú¦²GxP!–D  äˆIüÕðY‰N>ÜanPƒ˜À:ðœ`È€6À¡zxž:ãË E‚ —$~i‰7âÆß‹Ãü@E8 RVBßµT’9¼¯SUWš–¢ÿ3ØáÀÃr„ÐPhxCø ˆ(Ñ_}šT%"Ñ%LÕÁ hÜP‡\1bJaá–(Õ/Að¡oÈhðB„üc kÀC þ`3T!!é‚ʬjÅ9äA#yúµF¬a)‚~¸CÔ@*â9Ÿæ?º¤Ëg-dÃÖ¿ôP8° dƒ¶>Ó 8äÂÄ`5¸awà-WF‰ªýÃþ¡®‚Õaîf„¤ØDá …$©ôÃ!$¡‰4æ‹`=;aDL6q“ž¤Òw „ÅGB²¢.qÈB8âŽí“Ÿ4±Å±Áç,¶‰£"îÈÄËÿ2B~D©F…,Syðƒ!ŠQÀR‹¦-Ò‚E±Uv‰™|"'=(8Aô!tàÖ c8ÃB‡:äáÞ0<œ¬9PM$v§ËB(bJ¿¢Å(§;Ä¡ i(ƒXÉjV¢U jƒÝ 1¬´ J1ýć“ñá m“Nie6Ì!€àJG„Ï,MÂÅêÃàÀÔæ•. G0‚þÁ6è!€ CR®¾H \HAÚ¤ða{àC:C,h!¥â(F!ŠPÀç‹Ð² *x‚ˆDc¥ÖF@Ýæb†ÿ™© Žp…û̹Q´4›$ù(˜’D$ ‰HH"pæÃšÖR¡Š®±B=D3(&uU…ˆF$£œÎÔ€I‰Ièœç‘ðàƒBóð (RQ÷S&P«mkŒäÚѾžH Xó±úÎ{îóIèè> ¢ÔûÌF²+äQ]OÑþI@Žæ‡¨Ã¬+ˆ†ˆÍwD1ñŠ’¹üÊ !ñ?¼å}x¹ áðÛz”N›Ò OwÁ €pœ'$NñPôm›ZWÈ è@†2iAz„pÜ·'–UÊíá˜o`Cäíìzßû i`yï §¦76ˆÈø!h¿?¤{G7'Ñÿ[ñ°<Úï ÁN«!(@ìÁ¾lø‰\®0”\ï:Ó½þ5® …Ö¡§qµœE£hô!=S1ŠÀ;|LÂ,T Ñg¸S)þ"bqð;£CK`Fà‰æfÄ.´bNò,½d>",ÂòkñíÓ†‚(ŠÂ()O’RTxEZÇ¢R!?æ²`€ À Ò ¥@3ö*5+;e+Ìr'»Ò+¿Be°“/aq@~îe/&)$u)m±)øô)å’e@¥ Ò À € O€d5Ñ=P‰‚HˆpƒRFTÂbÆ‚,ðÒd?å^ïD-¥ƒ‚0-ÿá-sÁn¶¢²hM1‚VP‚k N‹âPT¨Fúr-ëS†gÐo˜#V«6v’³€`LöôBóGRº¦i›æ¶ý/lA{Ð7÷÷¡j 1v€¢;‡ 7+´2õ~±ño4Ôjˆ1æ´€rs|,¤|ÌÖ|ÐfoÔ}Ó·™{:òm1C26Y@t0ðUW|„ ¡@y …õ€à]pkZR0I¢~XG…±y€°r—p|à0zEÒGüXqeó†@bÀxV0up•ð5×3k74¨ 6dÓX8Á[W2l å$wsÿWwV3Eœ¥v+É õ ¥¡±ñ8`×gž€t-96es÷˜“?WW ¤6G9“¤1 Ñ+r ƒÇvªÀîÁRW×s9'•;¢6þHIƒ1‚ð,—p¡Çp†p#P¥[.óE‘ pà´˜h ‹ Yyþˆ;¶Á~)÷qip ·K…° b"»ÁÈv_ËÖlô6ŽÔfmV@T# Ò v7U~0XpÖ¨ˆ0NÃW·Á¨4@noò¶™Òö|úüf™r€_¡³”V‹·Èkºèi Öa`WMÎ%{$!ètÈH"Z5Ftðj _µvkv‹MÀi¿ÿlT1g°fárb)æ?‰†Agá:XÁPºe‚¤/'QQ{€Rƒ–…&?H bÛÃîÙ„ŽÆ&Fî5s-óE¤„%ò(j‘1Ú’´cÒ¯v®Jp<›‰_à:oUjÐI¯¾ÒJú’;! &d>u¢gj;‹Ø‚kXÙÙŸÂjë©=¨shoÊó.;ˆX>}꧘°%ThIÚSˆ”Àaöꪗ²Ÿéi׌¦^ð‰vhÝŸi€-–0ØN;(b$ÖòYƒä#EñÄ‚Ã"(XbYf×Gðfi@›@tž€o3*aì²;¹2…!EØ'±;ìã>f ‡¬}ƒOhQR’}ž[`&@èRl ¸ÿÀ îðÝ  ”P¡L¨dOx+/¦+U……í‚„€Úp¡ÚŸ->픪a8RÕM†š?ùô<¢â”  ÝðîÀ ¸ lPçÝÃ]ܵ§¼²'ÓÁˆƒ˜Q_`ªLÊÓÒacˆ)nÝÚm«o€žð•›@iÀàK7–NöÝ(‚=T°-ˆ}°-p‘ÖáÚQ¥ˆãq‘eÏC? 1l0©ý³=i¦š•§zRHØ”à‚RjOV1ŸáT/½ªomTláÿ‰®ÜºhŒ6‚írgË¢Jmº¬ZØ\’-Û¢åÕëf§ˆ#¥%®ö/íóc :¶f‹ÿJ¬nÿÂiÀæ.¾˜Av’Ô,CÚpÕq½Ÿpð褻±d—ÒY)L” kT=è\0Ó5½²,‹ÓYPžh€AYñœt!ÒéK ›o#Õw€{$U‰àîsz@Ž •$›\…™f0bÕX»³<ë` `Ñw±çEºQUNÿwðÏvƒù!­àS‰ƒd ú^Á_±•ƒPLyàno0Îå¼¶mû¶p0ÙÆ™>îX)ÍX°E WÍò±Íu1¸Ì©æE@Màs`’bså«yØ[Ë{dD#ú¬ÔðtºU0 ¥|ÊWÀ±W0%ÿg›|½¡…FŠÀn`JЇ yRWr`|D‡¼¾Í«ÈÜö¿}d œ,ÈdãM0h`AtÐ8%¾c7À_Y4Gs€jñT’¾a—óA–ða¬¿üëI÷"t‚·ÅaÔ AY3SÌÀ@÷“4v¿´Íy÷4ª•Á/L5lwõaÁ‚ åaê–^xæ.¦‹–+U¦DRJ)Sª`ÙâEŒ5oèäYzh‘£ÏÿÔSš4‰Õf'Å\tHŸ Acknowledgments Go to the next, previous, or main section.

Acknowledgments

This work was supported in part by the Materials Research Science and Engineering Center program of the National Science Foundation under Grant No. DMR-9400334, the U.S. Army Research Office under contract/grant DAAG55-97-1-0366, a National Defense Science and Engineering Fellowship, and an MIT Karl Taylor Compton Fellowship.

Clarendon Photonics, Inc., deserves special mention for funding development of the parallel version of MPB.

This project is also deeply indebted to the free software community for many invaluable tools and libraries, especially the GNU project (for Guile, gcc, autoconf, and other software, as well as its courageous leadership), the GNU/Linux operating system, the National Center for Supercomputing Applications at the University of Illinois (for HDF), and the LAPACK/BLAS developers.

S. G. Johnson thanks Dr. Matteo Frigo for his friendship, inspiration, and definition of "legacy code" as "any program written by a physicist." Dr. Shanhui Fan and Dr. Pierre R. Villeneuve endured endless interruptions by their group-mate and were generous with their patience and enthusiasm. Thanks to Dr. Douglas C. Allan of Corning for pestering (and bribing) me to bring the program to a usable state, and his colleague Karl Koch for being the first beta tester.

Robert D. Meade deserves credit for writing a predecessor to this program that was used in our group for many years. Although it does not share any code with MPB, his software blazed our algorithmic path and formed an invaluable baseline for testing.

This project would not exist without the tireless guidance, support, and encouragement of Prof. J. D. Joannopoulos of MIT. Thanks for letting me do things my way, John!


Go to the next, previous, or main section. mpb-1.5/doc/diamond-b3-eps.gif0000644000175400001440000016223512315324631013025 00000000000000GIF89aŠŠ÷ÿÿÿÿÿÿÿÿÿÿÿ½ÿÿ{ÿÞÿÿÞÿÿÞ½ÿÞ½ÿÞ{ÿÞ{ÿ½ÿÿ½ÿÿ½½ÿ½{ÿ½9ÿœÿÿœÿÿœ½ÿœ½ÿœ{ÿœ9ÿœÿœÿ{ÿÿ{½ÿ{{ÿ{9ÿ{ÿZÿÿZ½ÿZ{ÿZ{ÿZ9ÿZ9ÿZÿ9ÿÿ9ÿÿ9½ÿ9½ÿ9{ÿ99ÿ9ÿ9ÿ9ÿ9ÿÿ{ÿ{ÿÿ½ÿÿ½ÿÿ½ÿ½½ÿ{½Þÿ½Þÿ½Þ½½Þ½½Þ{½Þ{½Þ9½Þ9½½ÿ½½½½½½½½{½½{½½9½½9½œÿ½œÿ½œ½½œ{½œ{½œ9½œ½œ½{½½{½½{{½{9½{½Z{½Z9½Z9½Z½Z½9{½9{½99½99½9½½½{ÿÿ{ÿÿ{ÿ½{ÿ{{Þÿ{Þ½{Þ½{Þ{{Þ{{Þ9{Þ9{½ÿ{½ÿ{½½{½½{½{{½{{½9{½{½{œÿ{œ½{œ{{œ{{œ9{œ{œ{{ÿ{{ÿ{{½{{½{{{{{{{{9{{{Z{{Z{{Z9{Z9{Z{Z{99{99{9{{{9ÿÿ9ÿ½9ÿ{9Þÿ9Þÿ9Þ½9Þ½9Þ{9Þ{9Þ99½ÿ9½½9½½9½{9½{9½99½9½9œÿ9œÿ9œ½9œ½9œ{9œ{9œ99œ9œ9{ÿ9{½9{{9{99{9{9Zÿ9Z½9Z{9Z{9Z99Z99ÿ99½99½99999999999ÿ9ÿ9999999ÿÿÿÿÿ½ÞÿÞÿÞ½Þ½Þ{Þ{Þ9Þ9½ÿ½½½½½{½{½9½½œÿœÿœ½œ½œ{œ{œ9œœ{ÿ{ÿ{½{½{{{9{ZÿZÿZ½Z½Z{Z9Z9ZZ9ÿ9½9{9{99999ÿÿ½½½,ŠŠ@ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠ @€ ,@²¥Ë—0cÊœIá/U{`íQEžªt;錢ŠÌ(2™ÀPš!ÀëZ‘ûCŽVƒ‚&kjÝʵ«×¯&kÌØv£MÎP@aýÌù3”*´nC‰#ºæè2šf,¥ éÓlœÀ¶Uä‘Àò«ãÇ#;þ¥ð@©l—ßd³³S62œ”⣠/R£¤M·mtM)Ó¡)±¤w†¥¾3Îô Z©mI¶±ÚV'›´l)K^μyó¬ÿ¶ƒš&hɬC³“¬x©d×yÿ¬»iyÛLÑ—›ÌëQ®×”æ4£ %h”ÀKÓ¤¿Ívi£@³o׳˜s&¨`GÊyÔXJo·M)Ðd³™€Ð 4mƒüåpL~eÉÆä—ŸÉØâ‹.–± ‹ùµ‘Œ J4œpèÛvÙl#á: ý³à‘HrF* ÄJËPb¢u-JCIŠÒá9¬)$†¸á†×}˜xh‚Þ1JIâˆÉ”¨"œR–'xËaâýù&¾m†ÙTä°ó CK&©è¢ å0`€ †Ra(]åäJ=ø$$-Ò9â§Ð̈g&hv"›pnha˜Çlä«bŽÿ‰]lv Í1%&óŒ”'îY¢r&#⛚ßeX§#Ҭ᣾M(9…y(E 2ªíc;å´GNñÀ"n::©K(讲FQy-Unµ²N Um#³þQ" °Ëd²§›Ÿ&Cg§8²9æuef‡ê†aY¡€Û±…WL&1fâ‡ÇØh§&Ë|²~,ʘCœËÌÐ"4edÓÆ6ɾ¼†4o”3˜˜^ZQ¶Ûöœ‘J(ÕàY)m¬Ê*¡ìqt&o‰Ã´\t¼U]𬑉iš(@3D²›n€í0Ø´¬#K¡ää"q6ol¸¦uv p2h’‰!ˆ>n 4rÿV6+ë°#9ÒHìªÄ—!nau–‰Ÿvþi"mŒ¼bœÒäÀ!9mˆ3ÒÔ±M.Ã\:.s>:ÌÛhvÆ6xlÃgÁáAä¤9/”¨Ï¼'tu—QXÊäÑr²m²µKš^ éÅ^7„6ß ó)Åžó´qÍÉxúŽ‚Y6Þ Ÿ 9ãG|  æ ³kâ2x·Ùpv”ÜðFY7@[ X!Žßˆ*SLÄV!.¡u€F&–¡l‡,|ÝŸ\Æ¡}qht?¢PôÿP(@ÛHFÛ8A3mÃ|c› ß $£@…Ä´SpIg0Rïÿzw€.QP׹φ„ăCÀÆ#EÜlO{¤¹Ákª¶EШ(œ’ŽˆçŸˆ„›Ù;Ô˜!ë˜èšWØ™fƒ…I Ǻñ?àL xȃšäÇÁ†<}‘ÊÄ;;ÐÌ^çk! wDÃd±°Gù‘Ä‹:D¦3Ù(T$’$”•ÄÌ)ë>ú"]&wG{ ꯢЀ’³¨_üÖÁ%rÁ ¥ä bÅq.äªRrü tZúg¢›Xìʘó2~C•>j´@Ûe@Zdåv¶!^ðy!è>R‹°u›!ƒéu”cp23“"©ž(;Øa ðmèSÆXÀJõѽ]'YÃûg4×µZéDT'!òmú²ôM2¶ñ !kç>&$ž¢[$ª—‰î7þyYËœ=¡ÍHƒÀ‘Æoš*»ÎcÛx?K¡GØaõŸ7€Æ=ð°Ì^䘎ÈêHÿp†Bÿ€w¥Ñ`ÕWanô¾¶A†}Q<±Ðêj£‹ØKF PÿòŒY/Ý6Ö6‰}ÒWF‰'¼ó]Õ;Ä ¦ÿá®R™f®)²;É– iÈyÍŽuPˆLÆÐwAv¢R›3ç#gNa/MÜ@7ÄJÄN˜“KdãRU0½LŠB;rdJ÷º—uùeoH†ÄݺíðMÛ³zÅò~q"Ã[áßáýq8á†â¨çäMŽ@8,ÚXyïZãòI aÆÜ;ñlÜÏãÎOC[d¬eÜ OGD|Ý=Î{³L;h “^Ó,’ÇÃUòGÆtåè`Œ`Â6žÜàÆÕ…bGža‰v/ûŽ-¤á½X˜w!Ô; 6 {ÿî(’tÝó"‡÷9cƒ½Ê…΢aÈ¥†*Ámœ’QþÁh ý£L“•s"ŠefCs·7JÀ3(k´iŒbòI7â!nÔ+ÈM±u'–UvYš§,ß„F‰_õfËÀxÌr/ÃCv ŽtgÙà}r6]’÷”A)e7vƒÑ¹`$¨5ȧ$3pdаp°@.ç Ù°zk;@¾—,;%аwšÁoÞ× ÿ`O0O×"ƒt3†ti@= QhA§9b° ¢Ó6f%32v¢P”`9LJv²›ôXe,&29àaˆÞæ*6ÕQœÿeS6¥!n£S¨âZ¸Â&»â+â€Zœâðlw× o9z]…2É5uÈ%Aˆ(dÿ uÔ1y¤ÞWÛ°`¤£Wš ’à~Þÿù8>In÷:c t†•2~iùiY¼Â'”Ó‰=),Ë•Ÿü¡'!¢ŸÐ°#G„ö QhÛ  7!¿÷¿QD Ùž|{µ ‡&3ˆV:²$÷ ”¹X‘& îtŠ…’©¸}×8ϤRSR^Ýñ#vpLV‚{ttÈqsA¿¹åë ë0j„vÓ%ŤÝÔIí#9sù\Ï «ƒnÏ`f-¥Ž”‚ÿñvÒÑ’…²ƒmä`KÁ±Jâ²fÏ`z\…AJ! Éä) 42‹G™‰P2¢T•ƒÙÐ%™i|@TgYÊq C7eÀSv#ÿÿò"7`"Æ0F`E<3©,;ÒUÙôÀ„¡ ¦/ˆÕ8ÿP ëXR…“9‹ËàhufW§%/³gPºhWcÿÑTW(!(*AÐ0¥úé™ÇÆ#“–F̆¬Û°Ââz‚\ݵ“e¶f7²…Чö3U•— ™ ~IúöH$¥vHFïÆ#2´!½ic¿PjvcSÉ¢/÷!G1Di˜FH88ƒZ&¡•¥+"v"S¦\ùQ—²Û1$k RåNŽT Ï°@`JŽ´#Ðpc•Ee™ô" ÿz.¢zm9Ycf'™ŽÓF$(+g m“‹C•„—lÊìàãÃ])™‰žV+ñã#µµ#$䣫æZ—oÌBI}ç”Éz 5f_´z–³xr[qâ!­šªšÃBÀ6ÉÀ¥éã6@©!Æ{ˆX9ür¸“•Á ¾T†A)ô€öð>x gHŠ{ˆ§#hÂ"f¦%VêBþA’Ã[Ä’À…#ÿ‰ŽØE&Ç =šÁ2,;·žâ17B©ËR”"(—áNk¤9Ò6UH:üõC±³/w$(EZ8š) Ýæ>”…ÃM´Ž|cJ¯…ÿZÿ`Û`Ï@Ckú‘G”Ô,È¥X%Y*‚lB§¶ªÌ¹2°'œädåQ×°Q€‚½€uÃ&ôû|Úé œk`T´Ãá aZa$6` ˆŠS!âp´Ò°·œA®Ûp7*gð&«Û 9–`Nœ+ÏP¯”x,S¸d†2­{‰ùñ OtTr«÷!["C9·‡¥ÃCoíÔÁô`JËÙÄÒðz©Dn;r½Ù#²t!R6å°.EAÒwCú˜¶¤ ʈ_þˆ•° {ЕPS`Ùð™@_ì TA8ä ‡&#ʉ¿‡Ãæˆ2¯Ôjf?°1§éÙÿa”®òvÙÓr27™ƒQÑÚA8sm0¥¨FªõcmÕ#ÈQ\F⸅„þS¶³Ü6ëB’ô\¦$¯äÖP*1¿5rvú¡Œ[˜Tÿ0Ÿó™#A9—7 2ßETô2¦×xD]º‰S^Ñij¤†Fá°3é¨:u<Ç?A`T Š©˜äžùè°¶Âæ{×q¬ZÏ¢ª•‰2}œÏ »œ?°f4° €â$É¢²"2.Ũ³Ö?Sâ*Æm$éQÜ6j%ï™ìzĆÙPp>Ę,•<ɬ§aŽ– WWÿ†ÛPñ z“I£CF%¤Ò7fˆ•C*&óA~†:ÂùÎ":;²JfFgÄQo fZA°³‡\9@` ´#ÿð6B!`+wù¶ÂâÐ }%ŒÛðÃÖz€³)³P˜Ó~DÀ= uÙ`ÐGô;bf¬ú`­*‹×q fØÐÐqf§¦«- – cà{ó·#ÛàLs0 ´³4œD—å!™*ư*`+³!AÄ´ B¹0¹®Ý H#꼜aA€}pdP`ñà*ÞcX”,2Æü)%²}("9Àã/ ÇØzƒ!â5 Ç0<éfJ"u|õ2¿˦ÿóOoð ͆®áSvPÝ%_ÝW­äpQÖ{;«¦Çâ°ݰ·Â´`kË´ç)§wšX {2„¬T‚VÏGì`¢±ÖÓÂ¥¹=Òh ‹…ýqˆ]áÙÀ¡ ¶gò¡P ™Û|Õ#CÒ’,£Ñ³¢æ&£©î꿘Å0®’y®"ÒK½9¾ßãà¾ñ Ìøœƒ}5B%@Y=dÉ T-«9fpšÝâ@/B@q@fZ‡id£ÿàA4p&—N bDF%m´?†â·'¯Ý» ZÉg9°Âw2†¬“ú×Ü©7¼ËpŽ,#?ðDBICLÿԃ¼D€po@6ØÛP Æ¡ ¿9Œ~Võ͘{hñé° tИo¹FHÆ%•Ñç„GÊi *•Ul;Š{3;Ø—©óëp ­V¹D&Qtq–0 —q/ü$™$‡ÃñŒØ¦7ë@kÓ8gb‰#ŠNf€‘c€@@ä{‹d4tÅ,Éæ*ý“«"°…íziþwßJÒp s[²®ºÌ52„—9k¨†êu¥à}™–åFtL>2–$;j¤˜Ñ*jÐ4%ƒ&P`²dÇ -Ë‘¬ C‡ÒævÃá²ÉÈH«mǶ†e²5€VfÛŒlk¶ý€¦år?Rn ´m9VÛ„l;“Ó61ÐÞ@"tÛ›l£È½!…œ6„8 ¬YµnåŠU_W°aÅŽ%[Ö¬ÕVäâlS€¥šn¤ƒÏVºPÛì€ÜÖ†\ƒdo¤ * ȳ7:·•Ò»-í›2R©ZíêZ)ÃÐì,+Z†cÄŒeþ…ƺ¤4§I¯¾HzÀÅÒ@kÿ#»pÚÒ8iÎÚa2JÀ…S:6P“BÚÆ4-3žìx™’ “µ¶­:4iÙ¬[Ïv]SAh±3ŠY6t²¥=‡þ¼>â h7¶Ý€Ff[–óOÃ÷|Úi,©Ž4!ƒ@J Þ v˜ì*¬ 8ë¯.ÔpC7´«€G1f8c†2fàdJnx±Å3”¬* øPÃlJ¹l›$4“È4Ñ:ò ¾¤o£%•¬µ'ù“&(0¦”†i ó º3ž KJ4[’â€#&¸2†ûL4¥3šàÀCȹc*hí’ÙN»mĹš‹Ì{ˆ=ö^{hÿcÜ;ò40à„¦QJ²‘ÎlÉF“l2¡ÍÑÝ À¬ÈjGR;4ë{LUuUV9,µÂVÅÚÔªÊa'²Iì#û~‰ÏÉ*—„¾G ±4“”²‚œ5Ä¡ÃYqBglèØ† hFÙSr€ì–ZÖaÌG; ©Ã 4 ".¡2ê<†¸6œ#È ë¾ƒ¦8ðʦÇo÷Ü“>“¤4’£ÓÄxÆ3H%…FZiéHG•‡ñ¢+=Î&”¤zf²XÍÒç—ŽCyd’Ëz•²ª$,ƒq˜Ú )N¤é6\"–‚ÆW„OÃVŒm¨EbÚˆ+®ËaˆUqh›FUÏÉm¶!'›no-gÿuœ/Þæº g¾óñ;M¤‰³rÚ‹±½FgQÈ(¥€¶Ë‘e\¶©!K‚± J“mU[ZUÄ–‰ëê#››FÉÆÆKà— —|rÊ'ßQÂnxcqG6Ì (‚ÏÇsKéÑQ_k+ƒªí çPô£"‰”Äû†eÖûOþ[± a<0®àåz‘vÄaE»M—ÛZë’ ‰ÙŽkKÌú¾Sq2P±V¬ªÂ ÔK$Qijªªq’õÉ¥røã—Ÿr§›Ö®Gü“¸fWhfï¨6’07€*È/ˆ¨ã ÄçI¡Nƒ›3lƒÒ89zÚ`¨‘ÿ[j”¢ã Ï@¥˜9Lh‡l¼Ì'ÛØ nÒ„%è„:?iMÈ!ÊB;šŸXPÕC Qˆ“Ï·î·=Ä]¡ ÚP±9GÐøvBÂc(튡H¡J¢ŸÊD%7b’’3Úg'¥ ÇŒ±f…HaL qCÚh*úݹ!Rƒ¬œ¿¼SkØ À)Î2Ö 8¦é!øyX3(JÃP “D÷¤ÔØ'iÙhÔì¸ôŸë EªAƒàÌ}JG”‘ŸûyK\æ2MkZ·†b‰,EdªQÍ?ŽÔ´G™z¥$ñŒf!KZÔ”¦0ÿõÝdbDâb.©Kp†SœðYXÖg£›.Z¤übGrA0Ý…©QÕ¬–à"6¸xÔeñ€àÄÁ·œ¬dgA zPB~“+;ªJ ¬' _i’X†¶–Š îRäP\·^i#Çý¡#%iIéP±ä¢Üä¡ãliR˜ÆT¦$-gWÞ2‘ÎT§;åéLk €Œå?íiQzÔ¢©KejSúÔ­ªS¥jUK†ª¬á-"ÃVKØ ½ì@_ެzV´RõªØ[÷` xÔE°€E,檊XdB¡XÅB±†Q€a ` Ä R$†WÎàDÛ`Y ÖA‹ÿ´FV²•ôÓ2´-Èòk&FÑÙi©"}ð+`É ‰´Í@œ ,à’¢rð£ÊÆòþà4œLV·»Ÿ…¶±¼Ý|í2ÒðQ),¢À%0bQraäÚç²Öx`XíiD†q»dxmذ©™gë~9ámyÍkªõ᩸ÉÅ3Ê5ŠëÀ÷;m Æ@ˆ³M¸ÅAˆÝ¯sc$Ýë– ÀYFpœçœeüÀ9ñu|´›¦•B,©:o…ŸÚÒðee¹—¹ÔºuÄ$ÚËQqÙ†Ü ç…%qH¢„#á4$L/œŽ¡C¯Aƒ%ÅíÑo›†a Ù¤¥@pîK'Jÿ1Î1qŽ|'æmçÖ™bw¬#§ã@£ÉîZ×»ˆ¯#·+89x—CÊ,†27d9@¢&º&ÒA#H¦K¿¨°z¹,Dòy :ôtPÅ*èŠÔ®!dhQŠÆ–V¬ã޹ ÇGstÎ1•‰8€’¤šœÌH-?Ï$^¤&ˆ‚dgOV>"xä”d@u™LZ“×Rƒ2·k9jÞ–Ô̰áÆ×_LÌ^–¾VµÏKýÇÖh#ØBù¤+Åθ=À"p¡Ø«³þÚ¶Eö°µ¹? .r°c®Ã ›ÁVãO;9: Ù4sŒ±ƒ8_WÓSmM˜kTG;ÿ×è×Ó¶ë”âi¢r¦Ccm`þ š  ¬$)â€8F$°pHÈFÈ‘ñíÁ}æË‘žÃ¢Ôe ’ÏX9Ê QXŠ3P÷´7Єi3±†:”¶mŸmfKqÚÝ@o`îk]‰Ø€…µÝÆm›ÆŠtÐÄÞ!ˆ»ì{Œç9 3ipn¼VóvoÃäF¨Ö|Ê.Zô©õ3žg8kŠ ïv0‹ÒÕe#äCIŒHàè`½$3HnÙteYN¬3‰yÃ2\ç² ò×FQ˵2ó˜³ æ`©ÊÔ}4E°mÊt_û b‘{¢9.”€.íµ[]ãY÷EbÿS˜dxà—ËGW;È¡õ§É·ÀÓa΂g¨ÓQ/=Ì bÙ=ô1GWDt«Û²‘Ý’^G+؈7à(ŠÙKÆQˆÂ˜F0"ù‰vs®îXÓ 8n¼+=梈̈"íÇr ʈ@¥À·˜Ñ’`z4£„1ŽT3°æÃ4Á¯6Û”ÿ/É"éÁŸÛʉ„‹/OÙ esª_¨À;,†€w1HˆžÈKº#8í˜2hè}[Dyˆt)A3kGÌ¢H¬Ä#3Îp>ƒ>Íà°Ûš : h؉ê‹"‡$x rÀ5•Ué#ò‘ ýR¥¹±d’üð h±)‰Üy ‹¤£¨Z>û’xA2áPÃIœ¯Z°m˜—k<¸ƒû‚èŠ=dª„EX,3yÛ´ßÈ„‰s¸ã³c0|1¸êГ)Ë“+sµEz¢{!“dxâ¤2ɈŽþùNKuLCG©iÀ–˜)ŠR8¤èApY‡ÿ+Ú¢ˆ8àˆ"SZðÒÁª3!²Ê¾Yyƒ:صYº°‹|°…}€…™ŒÉ|¨ œ´iAd™2`'2X‡S4rp,èð?ÃpÆâ8S1O»wQv<š—,#ˆzœ"<Ái ¸¦Q"A:ªrR9;Ž_H±å°GŠ·¨¬·¢J@Žx;¸­ÄK>¹GWk¢¹¼tÌ2vd¤j¤4TKˆXŽ4IèÀl©6X¡ ò c1‹³á»dØiØ18 ¾7„‚ߺ!)‡«m0 ‹r–—œ6 ˆ©˜L‡ŠarøÉ–Oê"dÂ$“¸ÿrH‡p¡ ±ŒsŠˆ5.óºKNƒøŽ0YDzÑ‹u0¾§!h¸Î­ü–ƒ¯SÙ© *Ÿ¬HvX à{7À\NzÓ4é¨KzÙ¿óDœ0!§ñJ<ù™ù7õbøªƒûŽ:‹¸cŒlQ‰ŸÑ–•\I:0—m€£Ä¨¡—ÙÑÜ‹;Ú‰8‡ ò° ÈÄùj¼ʆLŒ`¬£h#!”ž5l1‰¤iH8¹Ú QŠØˆ¢–ÚxQxêQ.‚'Ÿ º:‹J7qG'*èùŽ,MÙiÀ7ßcQ˜’ì¹:p¯’Çz¬tË-SùFƒÓ­°u(‡(ƒ8ÿ*J—|{ÎMÁýÃ1iÀ”½Ø ! žÓRà™‘ʉAÀ‰#%Æè;îQ[QS*‰l€LTdQê¨!Ü@›g®Œ)®l¹Ž²á‰9J¡£ ®ÔlŒÈ¤r€gYùð‹VPžÅ8èÐ7Æà„ꆹ$ÙéQŠðŒ0 l˜ó€!t0ÅMvxi˜Sˆ[ÒœTâZ¡È¬S!\?pªÀ¾“¨d+¨;ä&ó1ŸPÖa4ŽâPŽ-lÕ°AŠ@¡b#‡3ÐVYÚ¡®Ø‘(Ï‘ý*¡pY‚l¸#¦¸£±Ñ Ë ‰TèŠW•éÔ†ÛÈÿÆtÖ`ƒ“,ÁØI ¶F­¹ŸMõÂŽL AXkD:qGÅtAkÁ$ 4ûHM ÑT/‚ÔâCØ:@aK0)zƒê‘B\Õ؆8àÖÞG *2¢¯Èë2¨u›¸(OVX·–i ˜ h&èŒ_ÈÆàr €rŒ'”œY‡šqyuEÏ ŽŒŠ-4F/¬8§LÁ”[Ã/%ýO8QË9…šVÍËìðRK\$›ËITN#£Ä/¬D1c¤5C0ûFøÚ÷ã°:»•BÅÌŒ¡ˆ×ÅXŠ6꘳ÓY½gˆ³Øî£ÅlµE*JÐ3ˆº¨‹¥¥¢ÿ_p –—T…¤‰P€ìqih¿õs$h™×¡ÕÓ( }øLLU/§! ØŒi0(Àš››`£œÐèŠÈe‰‰Ó˜-‰ˆe<ÌÃÐ,Çõ\ˆæ¨Ëd±ªLDîHD¼ü‚p8’Žv†31GÍ$°2ѵ‰+3ãÈŒ°a¼$Š Š:B7*èÍ!¡L)³ÄtÖÚˆ³r9VÜ •YšŠ¨ ¿Ð‡x…t°…˜¬á˜´‹|zÉg œgiÁ©–s¨+nÛƒÞ¢rêC~Uô¸‹8ʃ±‡°ˆ°ñ=± /ÚørÉN@eQ±¾¼R ƒuX–IÿšLã›Ôá}z͈ùaqèIv’ih”€´uˆ‚tÊD4´Ü2ùBTJDWM0`¹ä_S+ˆ}1¸lP5ÂÅÎÿAX;ˆ¬™ŽwQMŽ—‡x¤å@³º­[,i”È‰ÚØlp0ÑÈ«L]+A`{NξҩºørØÁ Âõ›hy{¢aˆQd1¹Þ“†I¡„“€-‘-•kœ›º¥›ÚFj“69H»e“jž¸dД09ááª3:«­H€J{ƒ5²™5j‰_®Íh‰ãw¾¨gQ ܼ"ñÑÞä$\Æeu£…t0¾å Yj` ž÷t³) Ás!»i5½ …·#‡ÿr8Òú¹Næé–º3—}Û†gà?¬6†H”£€Q»mé‹LÈ4ÅŠ ¸Íž uhŒ%XEˆ‚}X’ð–¢H Šˆ´I1‰EfGù’:&0Pæ[Ø0 «u`᱈fBúÚ~”71+H-ɵ‹1‚¬ßÜ Ž0!ŒÍ¸ÂÂEv8A¥¢‰c°áŠQ)®cbJßýÀÝœbꢹÖJmèë–OL7:œØÔ[²ÔÖ „/ž¶¬Õ[Þl ÄHee"¸3¡ÛbZ(R6"ÔÓÑ”².êx[]¹Úx ½ˆÒŽÅ¤ÂÕ¾-Vìxƒø‰Ý í9â° dŒ:@œÿt0‚t ãXŒ8vÔ›"&8¼eÐÈ5ÈD€2A¼>H7v€¬YB¶ÇÑ¥¯ÐÈwŒJåÄ%ý[ë[Ä\ÌÜ©ŸH7q™OŒ¡Ž ˜Ð!ëð•z‘I8ÿANZ,IM±¹eIM»o04Ã_cÒeà1"RãK½ ö⺌¶ž<Ë æ¥LÚà B^—AÎ_æÀ—^€ÜèEö¨€§X7ixŒlAؽx>. “êý…&ÛÌNNá”h2ÄL½ŠFF$ëЦ £ÁÐnž(ޤD±(PÆ$0‰ûŽQ€¾náó©ªN¨ÉØ7¬±JK¦D FZj¯ÿì(R^ª»Ç>0ëLGq77¯ T[W°KÆ[L)†‹ãäVr°±^ÞÀ«[Š,—ÊCÆ®5ÅtŒtH€ÿ@ÅüŒ4vHÓçˆJè´ÊðrÖP@—sm‰Ë`‡š¾P]ác2¦ b {óNÁ„ˆõ,ú ÞtÚè|+ŠìøƒûÑJ“uc304lÄ„õ%r‹sb©|U °[ ÏêDTì‡ûÈÓm‰@@k1xÉ8‘€²§Qµë˜¢{a—|TŽ( ›Œ@1;y—øæðvDàp±NÈilNÝDÞ0>(Ý[)Ïx-‡«7;(Ü †€#ÏäÄ^!ÿ’…ûš+Y06« –àÅ/ú_þ…tø‡7&‡ÙT¥`#±µƒêL·žˆl6$HjeØ$Aˆ"g> À] äèt@ÉèBEŠm¸†[YžQ0N>ÜpHgåqØí•¬Óé›"øº—Ë¥íFŸ©ð €êš¹•T$‚éK ²Å#ÝÚ¾8™²$º»d¸¹è@1†ÝsB¹xl*š5HlÆ4”QÈáÜ ß{[ÅÓ‰l™;†lbW'0Ä/1é;ä0"uš:꣈í(ºXcX°Éº¸‹œ„M¼¸q †ùeŒ™&Õ¸C‘ùKRÚ×HSn6óŒÿ¢ˆ’øÆç÷û­lÐÈTÇO[Æ%«Ôƒ/‡ÝH¤8\Â¥2®­8b ê]ØM ×ùˆ§áÜ“ÈZ.Tô£±_áÈ<Á1/Ù½®Õëп7ˆ8±Š+ 0l|)¦qda‰Ri¤ˆmm¶åHVfYÁÒr!¥‡É2Ik“L´2Ð4I[ÍŽ´:ÉJ‘Óí¸ÒÎ{“ܶLÙʈ U³f¶=âÈdÓZD1É(I›Í’´1ÏÎl³íÌBho¢–‘VÃಫµZ…V£èC°Ukxõj°èY­YÓ>Mú4+´6ËÚ@ã$mÛÅe”.58ô˜&ƒÇ õÕ´ÿ,pDM€K¶XZ¶mÐ$ãÝy2´Ìšpîìù3èÐr‰.-ú—iÎ Z‘û³MˆÔlN¡’ݶMU<Œ«‚ [¦ïo¢¿ ï \æØo¡{È©ç³wŽmdÇfÔœZ)h@2_ܸÌdÕ䵋³“Œ“À¸ÒÊdXGšm Ñ¿GŸäýmSãÇÿ÷/~åìÐVoÝ Ò¼±Òø$ PB"Mo eaZg’ÐÔ± äгÍÒ°’Ø$U]UeÛÀhÕ8cod@ÓÐÜ £4”lãQq¡d—×^QrÌ^O–ñÌ“ÐØEÆd†Ñ–ÉÿæXfÙLY2–Y“ež¡–›mž¦-úü§>¤¥VÀ‰¥d#A2JõPF.º¸ 9Ò”²F)‰“Ç8 %cŽ=Ø éwiU0±BN+ë°" Lzr’MÙ¼± Û$±MŒvü3žo<3Pè½q^6£Ôµ¯šøÇ«dM…‘]G¾ñ''Ï ˆâô±ÎâšNOˆ.µ^ dMµ] %#WAr]%W¥1„]¥H3È:ô¬ó9›BAâk—Þ ÛÍüîÍ#ÐH’L2ÕA5¥c„¡dc“MªºÍ(Ûœ‘ ISÃÎ:´”“'vr§4P6frqñÿ•Œ¡ñJ—ÏŒêIìCÎK¶e@núü3húÝÎu`'ÍvS-V3$#ÆZ[eTëг®„=¹×qQBJòF^òšÌÚi'Í€,áAÎÚ¥N%D6LÑeWÿT¥Ï?b Ô2ôå÷^€'ãwpLŠQD™UUàâO½Æ"ÜÙµ1˜1‘Í«Grñí2¿T¸çzaE²—Ûà‘ ¤.3à‚=l“9®Cµ/o’ñ-Ââd’Ž*é@ì{:“ŠªØ—8 3 MÏè§IÑÜo“ž¹Ù§ú°˜j”5°cõˆGçýñ€Í[;ÿÄÁŽí!æ[ÄH)–‘—K?¹ºÔºÁŽm¬BU¦ÊF‡¦B–é¨ 5†4þ1UViÚӢƨnd Ëhç~°˜ÉéF3t‘L)ž1sUÄ‹a®BqdƒD)GŒä l|ˆ=‡zÃ56¥'tNæFÓÌȰ¤ÔLj½¡AÊRd#@;°˜tV"1Ì@”HàoPŠ0¯dͦâSªFK/ ¿Æc+.’cU€Ìžü)P9£¿÷É¢%ä¸hÆŽR‚ šø&ÖŠ5œo7ðÔÆØ’$#?Ç‚4nW tIcU¬Y9nšÿÓrgv8†º¶£@e€WÃ?Ô¢W¬¨|ý«Ô®elG!?P\¥Ñ¡¹dSxÙ‹ (J0Ê0™ø_´7ÄIã²>•™ JDºh0ÉLA’¨I‡P»ŠB®òZKÁ¨3±íÈq¯ìvà¢/áõ£SýöT.á꺪¶½“LÏØÔµºÖõL&Öà¡„ªX(¶á“2`4:Ûbcª„p)<ˆc ݸAs'‰Óž]’M!KH »f$¯gñ+òôF²P­(p$Ë–á4‡¶°-6¸–Cªâu8}ÙÚPˆ‘DÃ41³ÆPcJV¥êÿAƒ˜1Sd.ƒPÕêp-9`­V’¡WŠ¥Æ8ŠPo ¡ ÄfòéûvùUR~<åL}£{]Ï䂺K~ru}ŠÝÎð”ÈCf«N,]%s™~=ËF#ÿPJØÔcøÇ |¤à˜%A3ªm 40e‚UÙXCL‚´  ‰2„НÔc<©†9 ô_‚£ÐÁ¼llØó’–ÆT™1Á¤PÆ£¦ÌLo£7á3¾®1ÝÝ$8‰̲ÑÚµr&»PÍP_-ëYÓúgÙå©N…LŽ@ˆÏfü‘†zã°_$£_êÍœïLŽ5ðSSœbs Í;q0Û&Ì.9DÜ0g5ÿðËÆ‘‚5A’£JÇ€Ä`øR¶`ACWéŠ ˜õs”ÖcìØ¢mÒLÞd«ßñt6¶»=éØC<`„œà‘LûXÝåëÖ©Ö¿¸&c ÔìBW~,º¡®J_&Œ‰oŇu$â…°]³¶Ál:Ø9é¨ó@xbÆ@„È{e+ÈÊæql˜ÙéRÙ,ÍDeSÑ~¶ñ¡$´² j•Ÿå·<|D Ò@ŠO|"¤Q,[ª/ÅÒNŽIºÏÕÖÆã.÷¹ÿLSÛ ü¶1ÌðrDÇD™Nk“1e狉LE°ô› ò5P )C7Ö…¬dNÿ!¥ N¹ƒ;¢2z3€„ýè®t¸¬‚´‹¶5 ™úòTvèjÖZÉVÓÝgrª=îsOw)Ûw2 ºŒ~ ‘&²ÙÜñ1¸¹-ýƒ0%{qjµ¹WÕ:¬§z|F«BÒ‘Ï7ž~vÀ &«ú'‹vƒ-»¸ä¢¯Ä:$ûù ɹÿ…=t¯ÿýó_“¾Ç™™”‰¤}ËÉL fF-„Ý\ÓAàÐV ‡ô…JíP ¿ØÃ´‡m½H2œÊÅœŠºœŠJWt”ÁH!ÐÇ©•NÍ^ýÅ]ÅõŸ Î º‰Æ}:¥˜&€YM=ƒaXD·xZ…ÝDY`eÿžQDDL„@HdÃuDıø˜vu†N!Ygd—Û=ÜÕ Ž!ÒšN½DOE6è›- J…€%dCÀ˜šMLQÄLÁ5‡M’ŒHܾÚí•!!¢!RÜtÆÐÁÍC(dD§AÃ/,‘øËÚa6ôNï(\Ã¥ƒÂíÁ/Âê”ül!”áß!¦¢*®¢ÅÝ`itÜ/°Ã¦ SÅøD#âŒû" R\.ð+þ"0ãŹâgtÒ«á1 £2.#3Γ}Æ3 *6#5V£5Ž¡Ð<ã?$ã5v£7~#8†£8Ž#9–£'ù¢9¦£:®c›èà ¸ûÈO)jÿ!hp#;Þ#>®â/Ð?òã„L•&Ü@&Õ‰Ã)¬C§¬ ˜b>F¤Dâ/¨ÂÀÂdä9À‚-ÀÂF‚*À¨¨Â?:Õ ÜÀ ä)¹Ï6°F -âDÖ¤MΚ>Ü?î\$<ÀPnä9ì8„¤*€CI&åTÏ%̬dÄÁcÄ @+lCQÑÂMn%Wn’OÉO®<@ªB(%Iš¥¨B&œåH¤ø‘AAjÂó€ÁSrB"¤RQ¥üJMAÐt%`Þ¤+À±¸„(–B $ódÂÔ0æù,¥T‘Áù´U9f2\æÀó¬ÿäúD\Ö@6(’kˆQ#&jÞ£=€KèIŠKº€SÍ¥\–ÈeSÕæmfffÎ¥ó|ÔSÖQ]~f Ìᨈ‘¹¦ª¥&sZ#:¶‰kbÆvHáG<ÒR]ç]J%GÕÑl 'mÐnjæö9øÝFÌÊ®M)CŠXÆÀZsƧ>'ÐÀ‰`DŠXF¨g»Ò1€YÄ$çͦf:Õ¨ú@Ñoxf% ‰L¬JiØ£|^(šbk¨š„&ƒ®žfXÎ_l –DÉà¸ÏAú ºqÍ…ý ÅØqõ§FDçÍ`(ŽÖš…ÕœA]xe´ç#iO™` ÿG‰"Lj.)†]ÈÓø…P¤–€ØŒŽ‚-¹æ5´ÉŽæ¨—>™üpÆPDÈog6ˆ™KàL:‰[ö„ ]áEL鑇ç0¨Ö)ט òùÅu„LTgêèÉ{ÚÞ—^(}nRvÉ-_PVŒúEvÀ‹8ød´g^ƒ£‘ ’6–Á‘’“10Ä 1Äo”ªæ)á`ɹlFlÇ‘”Šž@9¬;hý$ꡪc˜îbP @dy ‰:ª’P£ iŒ dèŠed‡˜DÄ3lDº™[×4„ÉtM2¬j2@„Œõ…·ž ZЛ†Ìv`DäŠL®ÃOui¯.ã/ÿÁ ¬Á €Á Èk…ÐëÅ»Î#g@dv£Ê ©“j«.Ô£)FUOh¡˜ei-lµƒ1(ë1ê¸"铤V·b•+F,Fà“DÐÅv0Åë±FuEã»*ãEîE^dP–¤EÒd’ATdÄ1¤QÁ_ÄMpédukå«vj²vØ´ÒEbx‰ÉŠQh…ŠuˆÍ!Çrl2€ªqd«£|+‹ýFA,É©VÇ” ,$9Û,P¹ëËêž>ÈlFîÁOväOƒ*œCH†Â9”äÐÁd2$%\gK&d+ˆÃ¦à܈>kœ"툖[ºÿ—„-aÎÃaFå šðŠ—ÐEÓ†¨›*žºA¨B–_\…ì>é 9³ÁLdôå9ו™¢)Ò¤ Æ-ÿÉO ä ¨‚”¥Eb$,¬åކ„ÂXÒÁäe6¥\’Áó`gÄÙÀ•å¦h ÞEA®<„.”É$‘c Ûä$ìæÒR„TÐ3è (ÝŒ¥>’¦€J¼ ~ÚFx„EòeDœÆè¨úEšÝn³%4МE¼‡5 yÅÇ@ÀË©ðÚƒ° AZ/Ðð*ñV—ÆåÀ±J),PÁR²0UIÕdä*¸ðùÄ¥S‘Tg'KúîændS-Ðjæ["nÒ%çîv‚¦%ührzP˜éÝ z&]T`Dq@ƒ°1HœÊ÷QIá0gÖÛݵ†4À‹˜ŒeT˜üÒÅWUã@ôGWÅ·dYØ| ¼A]È花ƬIäÂ|lÔ—eÖ¸Ï$ rv¹ì!ÿÔ—•B–º ]èÿJržÒvzæpggzçõnbfnÞp®¤ŽÕh2ÀFykÜÌUÞŒUaÅptmwHvê¡ðª°JìM’–ïûp›GÓÛBfñ*´Äÿ¤l6Sü{Xî&48Oœðö ƒÁ¼ÌÒ›n¬Öhuº„Kˆ@¡Q[9'⿠앱”ˆCLÂÍÚ¨¼ÀF|,‹©HúVG6ÇEC34ç† „hDDèÿ]ì†Gfk‡îzë Ò‡BC=*µ­%¤šŽD¯@˜S¯©úï¢èRqžpú³SI±¨ß˜-Ÿn•žk2¨g/OOæH#ŸÈ¨Èôæ¸4{¨×”ƒï‚pPe—.æÀdCLRI“’KlG(—«FèˆÉ°bìµjë ØižF)f‘ÓölÇvô7A“ BÁ:@Œ@Õ!£8†É¾³‡°öZÓ[ièbsµOh"ïă-äƒ-¤ÃÕ+nì!NÔ™K…Þt ¤üÂcß»4h®c@¶{¿w«Ìk|p/•,¯lH)‘„ˆÍŸjìèÏP`Aå·ÙÀs¼µµgðÔ$•ÔÂÁà,ìƒ-܃-Xý= ?,ÀÃñÜ'Ä”ºÀ$Cì 0$‰¬Ãü<2g ¨zì×&¾Û{ü±’M‰NÐäxÉÃ¥dS×ÐõFjL<+æÂ oa.hüÜûE«*‰D›dmŽi˜ 4ƒ)K6š´lÛ m›xqÛµm¡%£„ÚGhÇÄk˜£à1‚ ,ù±¤ÁÉÖ@Ë­ ´•I–³NœÏÞ@²í ¹%“¡“¬FÓcQ}Î|4Pÿ¥M…ÐÚ@ %´4;ÙXmƒBîOl"í´6ÛF¥ƒÏV¼»y÷è§*`ÁÙB‰3"nM¶6ÙÈà”šiQŸÖ i¬Ô¶²…ÐfÛ­4 ±j:Væ´IÕ ëh°¦&®!’68*9r¬*b„Æ*w6NÏ(ʆf @råË•ÿcþztéÓ©W_þ @æ7ÙŠŽš,SéÕª“Cí³aC )m5žÌôHÙÙzo¤O‘Ü6r[Ù×6؈‚J;H6‚>Bí#Ë :ªdÈhЧ§rÊ)±¸ÚæhÞ€Pª§Púèß ê ¾Ùºêª¨$Ê&‰lþp‹r8ªÿm΀k›:¶É$ÁÄQåGq £CÈ"é Lœ²©§dfˆl2()[fÊÈB‹ZÖ¡‚vÈ+´Ð:205ÔL[ˆ˜…܃f”ÙdkÏŽgìÐL;ÄagZÈYG¿>˨¬m¶±N9ì=ÑD¡³€´¤ ­¦€øÇ´ôÆÓ´¡×Fü¯DÙ ,Ñ¢RÈ'›û²)e"ºtÛ†UiøK¦Íg 2M 1¨¥ƒ$iŠ©§>²01#²©C Ä©CçL¢N·¶!ˆ*—AI l“bÛn -™ÇÚ»mØÆŽ/‘B NVušÆx$#›yãÍæ‡%õ-czè×±ÿ'% J h(›¬A+3+«¬?º\'‘>C+Ž˜‘J&µ6vµ 46“ ­«šº:CÃU¥""oÐ$Ý Ö¡gBÄYg·‰Mι›uÞù9F PîçäØI„œTÅLæ—2UCPµ×6U´5ÛìŠÕ3ÐÇa/Ë*z,AY¥¨ëlìËM¡N4û ŸÊ0Ʋœn($Ä™³«²¹i±Ûæ_N¾œ”œ¦åÝußv rˆ€o£  k´¢FŒr¢Xu›?VåŠ(в±¡#™‚I¿i†ŸBw¬±2¤i"380¢,˜`ižÜŽUVÁdñÝh™ˆ¿JìJÔ[·ê*,ÿÙ8I†w÷™A“Ú˜¡ŒFm4,ÿà¹PðÅOTŸê´®H¡‚þ13%^·jïÛ®rÊ„«¹»&3 ¤1ö‡QÖeex`G h¶›>ul¡ È–·nqÂ&?VMìÆ ·påvã×@#²QM8íÒP»¸#œ¾aqAŒÞÐôävøÂ—Q¶A‹m´¨øcSيªœ LJ¥kî¤$ ×ÍàZñ²É5 ““Ö! ~É[QÆ66ßåfƒÐO6Ú$›ð|$WÊCÞlX=º¹¥ ØÛžZ’´µm|Ì1TéÈFU§ZòÚDB5ú-X¼ê£lÆ’®9Í m Ãÿõr £í9jz[äñqpÆaeqÖ‘À¹ÈiE× "Kv¶ i‚;"´âãê'›.а(Œ%w:7K!€FHHÇÒ‘¯Ã­PìRàšªH6@šF Tb•¤dÝ](_ô²PÁÄMH6?è˜>F6V` OcT“ž!›Ñ„æ Ïeɶ3' Ø({bKu–3zÆñŽÐq#[º$ŽáMí +ÈÆººElÒHÂàþ¥=y±}ãd¥VCäèÞÄAÀ(|)G9œàâr€hmç–g º¦œ$j²¡¦ÙHS”›@B(ÚΑ€#!hô«ìÊ5hÿC‘?bP ¬ñÈi˜’ ¶lt1ÏRŸ ¦ødAÝØhÚtN9yîEº Ä6³q†TBð&j 3#¶°n¼çÍæ8W1jžu$¤Y/Åb¢2‰êÆò†¶¦ìÔÐ ùÏ7òlŸÊa _ †# J!ÇgP:¢E­i ˆŽaÕ’T™’`{ †<ÕùD /ZWòå.r}³w›“UWP‹ø¨%=I $Ûô45ƒBô eV+"–lE¶ç„†ŠÜµPÝn“\ÛƒÇÖÌâ·ÜAx5#×¹º1²r´'Îìº3F9ÊQÙ³,%°7JtOO¸el)à’ÊÿÑÔä"äÖv¼!42¯æ½ç< ˜ÙÃ%$»åvn²¡œ¤õ'Êlˆ„„ø+a•®¸Êê‡ÃØ•ð÷&îbUY2c‘±Ç?û-¯\“Á¥ 6DÑ«cö`«[9%+«¸¹Ìâ)(EÉІ"W'q,4 œo ž1†>.¤˜ûƒ4vYÊ:ª¯8¤‘ ç@ ’Û‹èzÛ‹({Ì kE(V±U¨bIu C+ª?RÚt„a)þ±Ðt9 FŽŠè=Ñ ´(l£{G±šhE9Åe& RS™ûOKPXØÄJ®TS£D¬ÒE¾¶'ä=-I͆—F –àÿ˜©N‘ L˜Ú+–„~a±Ã5„ 6ýÆ,Y"ÜáLz¸£B9hC”Ù•DئXÄj²ŽL£&À ‰¬Bÿø…8ö$ÜŒbš€9J±0ŒBin3]k02Ü`°€ÇØÁª6H#rá\¤1á+ogè"‡$þ¶ÑŒfl*  +Ùí…¹ Hcj ’å䪻É’$Žº ¥Z;yÚšËaÔXUÇ !®RÍ4 3‰µÄ« 4îÃJ„€Š »1­yl\\ûäLºA¦.¢kv‚S„ÆgrH+A¡†«»Iµª•icp‹æía^¹­›ï1'²ÿœ69V±Ž=¨Û/¶ÈÇ]úrÀ&ÛE½ ‘ qŒBH{¨7;ؼoBÑc|…NNXm /9É2ïìmÜD´PÝhº„gü"¥â3ömê„{¸Þ(ˆÄKÀÜvÙe: Ã#yKB GÈÑ q€—ˆnôgru1í%«‘à¦ÜÁÆç· ñ6QÑ'‘ŒX¤·ìq V”ޱó˜çÆ2Áµ eƒjå‰6(9 ÐÆWE £*Œ w™R­ž—¸c‚þ,hËâJ9@F¬æþÀ¡/lÁ.öò/ü"÷è 0ÒÁð ã úÀðTö@È€ÿêÊñ¬£® …µG¾R§H¤ìXª‚©°ÊDpâÚd\Dt£ ÔÂQºa.ê¢ÎaaáôŽ õ./p/l¯H$¡^²á”2è¥Òᣖ`.,‚rì4H¤éDĪ8eüÔd=¬é·:¢#,‚"äð"Bc?:eVÚP*¦[xŒ ˜¦ Ò$m®%â‚–a'ÔÏÿ„b4&LqôODüÏHkA²¢+$a6¦f+T¤,œ]ÀÌæ„wÈÁðlo—üCSFx¤+Èàu4Á¾êkä*K{S:r1¢ q¹„(Ó’a'~1élF"ºõX¥¤¡,  9ÿØ"J¡ èNp`AáÁn!÷üÎ.~$0²á0/1ì% !ÃvžÄuLå› aÃf§ù¶%%|¬ÇÆ#Œ`-T<‚4^#"È# ²hjƒ#Èï âD+ÀÈúf‚ì†Hˆ$,d1Hon`\gmЉk&~ÍœJd4d£“-®Áa"î ÊàpJa¬G6°ÙmÓ‘6®Âªâo2Àl{Â-Á’ƒu1:xçr)‚5üoǤâšnbTx°c4.  ú ¼³ çàà­0€÷v0Ú ÏI/_^æža`„Hô’‰2æí›¦€è°ÿ›G!veSB%DlþqŒb"da¼„4b‹òƒUòck6'!ÂBe#ºvi,«4ÆBrB›èE–eZ ¡“Ön.~*)ˆoN^$â<›´e$·E!Ô­›0.¤:r2ÈáÈÁvæÛ£1€³IHÇ´*Ru¨ì È¡J¡£(ò9êj©4sÖfÍêÐϸJ@H/·ÎsTd,Dꊭ{’ ¨&eR†Gt21Ú“1#e a-ÆužH` –!.“!.é¿$Kb&1kÆÚ€45<¥#þ¨DB#~J$,Ll ­£¶Auã›0t‹Z8TO»Êh㹞Kmÿä“&rÉqNänö¦Ò3.©ƒI]¨Q, G Mð Pª>C´,¤…ž„¶! Û ¦`®âÓ8¬ìfãÚ˜% Ö! “ž¦S‚LtŒ c«´D„úJC'H¨“Z¤ØFJŒ/)ôáÒ´«]¦gv £=ÜquœÈ`^'èÓNsBt‚‚OKç™ÄÀ„V¡ÛF?È¡¢Š¦DLQLj>Ä© †d ]öFIè¥`®ø°¦ø ¨h°Ò"(“+j+(m„â/PÞHf4Òꬢ&ëL(L<'4néþÁ¬§+i]þ¥+ž$1~1Ä!.B#8gI¡Ê'“µ"@âÿ â§ôd ¬cJ©t cœN[â@wÍ[C¤%¢FdFu„2¤1Pæ›Æ-„"FaS/•ˆ¨O£‚2 ÊuÈìˆ(OtäÔ>g'( ¢º­„òãEÖaBc·L ppDw„¢‡âavÀkP™Š ²A’4-¶aòR£@ª,Æ7Š\>ÃN&¡þe¡äG+Ü…d²ŽV¶"6þÁ¶â• ¨¥>k6n)fãFú`YÄ!3p£+ Æ#…"Cºb¥.ÓQ)£%6íâ@c¦ ´D¢‚¦Z­U:æÈéÎÃú® 5¸ÔR "jÈ)ïq&c¥èe âaÄá7GÇ_Ñ'ÀÿÂäX  wàr™üt¥$#áêÖ _ôv>¢=>â[6n›hÅE¶,tyŒ$ácµBõâDBI"î–òOc>ÄÆNÂ$ˆ!ê4¦Y¥{¨¬ä¢ÂÖ!q¨5.eo‘R)d^v„rÅf „4\ jÚC¶ˆW(r¢= ˆï çâ&Hf$gKz¹e&b36‡Q*2­Ô ¢“Æ7ÜŸÓk…pƬn@Ä Ô÷)u,ó¯h¶†c%–Yd£1ˆˆˆÒ)Cèõ<%Wq?™‹O£„_`1'$a°>Œq%È2É&'â„Æ¢,¦@Ú6¢R tdK*G(]^d.lÀØÿŒ€4PÂünð@Uƒ%Œá¢Æœê‡;ob ”"GÜ"râ³î&Єb‘¶IªJˆL+“¡8$7!Œ!!|ò& æ3º"º ÒäÔW\¡áÚb'Ú€#¤¹ÎP$@â±&ŠØáQÈ·|í)!LÍ×’ñùžˆ&$”D7¾† ó£N•+.j¸“;G¢ þÁ@«OSÒ)ùÃp®© ‚©žb}Ñy£†¥ÈØ€ÃaªØÊh6Ð#+d#z2ËNj`â€*@J1‹èÒç!.&…Çm»Bí¶œ(Ù(Ö€(@X'Û* iþíŽ7ÃhîmªÉˆ)a0B€ÿ—©™ºâ(Vaº¶‰8²!>RcLØø ä9ìW>ªŒ0ÇXÁ˜ƒ-Ö¯|›C²´l¶c@‹m¤îhko:)!øË1'BNˆGÛLÃý¸e}!‚[ÖãìA<4í#Q‚f®¹tŒ ¤ùZI6CCÛX% žá›æ4Kæ–"N5d)`ZÈÁJÌ ‡X$Äa7tÚ“ûÔD ëG «ÖÚ 'z ”×\ÎàAi¹‚»"þh‡A´×'ˆ3މ+€ÿ¶2~Â$2˜ꤚ'¦cF‚izWdJBÆ–Êü§`«Ê9:ÔyÓ9(âCÅÈTnôDcnÿŽ¡(ä‡>*"G0‚8²i2@ò®%×'5)—nÇ”¦çþ ·Â{H¥M… n,í–Rv¡¶c¡’vCT¤M¬ò ®áïD3ºm×`°‚9†#,2„_c1~r÷žDš.­‰)gùŽÙ·žú©%’ùr-5Hw4v }^Œl(¢EÓA“!|Ëb´¢;Ô)œ hã¦pVssF¡:ØzϬQªú›RšÈæ:§é¥Ò`%EqâÊ€;’¡Têp3x#¢Ï×Fd&ÖÛ¸0%07­!¢î #Úª¦¶AÂÃ×X‰Š²Áëæ,XaKnû&¤)‚j€òÏ'ÿ ‹;æ–ÜLX²Ÿ Á¶s ü˜dø%Ö!Ä¡VÃ/2ðïàÞ$¡pŠöUÀ’‹²¡=†Îmk‡?KG™r€JŒáA¶buÕ÷ìJäÚ ¿U8>XPêÇ*ÂjÔ §:eÃn2£Ø¾©M(‚J!:ʧ­Ÿ#gîX£Äa ¶á¢>JO@1ÈëvçóR‰g'ÐW¤T"b6,¢“ÔÊ«˜‹›JÓé’ÆtI«Á÷Q3êld#:ç–:sJf¨@!ÑCNÍb¿…{;¦ç„¥í2'&ll@æYbáCïz!œp -0XHlðØMð¤ámž"uÿäÒˆ»Aò3.• Ä»¥ôäS4"»MÆtº&ôkŽ|m°Ja›Äxg™D‹\¬¤X }Úƒ9ÜüÍ—ÃÝó*ÜɲÂëøøÙKh4t6mŸ!'d9‚Ú#,XÍ,B([Tg¥¾£$˜+.ÇÃL›loP%¦Õµ"'v¢š ¦ƒ¡Ž gD†é}gº&41,rõ’Av¤þA4#s„ä¥P S10èV_x$_Üs1è…¨#c–"›ù)€$(RôH‡*¤}À"*ªýå ‡Û<»h¦*ç,–Ç®éLB¢sP¬ VE¿Ûõ¯eãè’ÃÝß½¦ÃÖ–Þ®ìß]Uu´Imÿ¾ºK=YB\Ú" H6¨Â^ùvu f?Ç'ÞX rÔhb;9íoѾ-d4‚Âi;òb×&D*-·Ô‚~r¥~¾âÚX ¤A«)æm1y„HÏyiðj’ð¾Ùn=2NÆ ·ãaŠÄèU™”}vöô艞CDïA¨ÂAOCü8–:Æúè{îç©W®tŒ6«U¯]k£=¶¼Ñ^Ÿ`@‹Í¬†6,S1–Ì &ciL¦ æehÐFeÛ–M´m«O?+E:6}jÛ¾;·îݼyçê]›Ü rBÆn³‘Xš]ÓÒÒõG3-ã“e VXý¤$¶ÉZžÌD.V::ЖQ^wë3»¤kBsß’æ? Ü«¯ly#žcßCÛŸC6mlÄ6X 9vÿSÆ69lóF6"ùT P@ýÁNÿÄÄYÿ½Ç4B=È9`@sž$I•·¢Ï ÔPŒW ´Lce#9¤ÃS)Ù$áaqÅÙÈØ õu¢]HÙ•ä]LBó¤]Zí%V¨e£dji¥¢+M6B×%´e“y_2Ð€ÆædɰԚj¬eçikÚö pzÞ–ço³ðK.úäbOž{îIË6\a"JƒÜGA£Š8ªÙt"c)Ù—ÌvØ%„eŸÖ à6£Hs^Œx=£•]±Ó(þq(4¹<£é% ŠÙPjq¥HS‡‡1Yâ_)˼ñ 'fSÊ?¿$¤ÒÿUà†1·=m›$Û¨hS^WÊ×t(B‰bݹç~¬Å6äÅYÛðD”X]åu^^dHCW“` g0»*ž¨"R³¸†4TM¼ZÅjšL&Ýt™eo†yK—uæŸMk¶q 4Ÿ‘†Úœ­¡Fn†JsŸþSÛ̽Ѣ'9¬ìÛŽý€b_ŒÍU:¨ÙĘV3m¬É1 W'&e I]¸`áU¥r÷‚ -ˆhg“Y1 !à?f5ˆŒ•ñ+4:ÑWÊ5ÅêTl±TÁ6­NÚ:aLg‹M)Û`äÑã¥ó`)똧VªëR' ‘î–áîl±´yKÂ9´°ÿ‚ÏønóÇ6ŽF¸Ã6dl%»O2|SRý ÎâбûîQýŽÔ(ÛHEξä¼A f#A2²ÊJÊQ‡yõ'MtRòŒMÞg¯fáöJj΢Æ'Íê÷–KûúÐòË/´:¿ž¨Ù‘ ZÖbÀz%Á0dàclò4éuls0²Zˆµp®Ùˆ9ÔŠul@x —϶±ýDB?‘F²a£d£+Úz›´å›ücC É^ÉüÃ1†*9xFLòò=Nˆã„«9J•«“pÈ?ŠIJZòÄúlÎ>X4 /;¬cAÈF ~!J#Ù(ÿ»šôe"wÙ0BïB‘Ž=¤£R¼ƒ£*~'•U/œ`Ô6æõrdP ëØ¸Vµ™Ij˜áØšl›˜PÅ&£èÎYŽ7|‰Ž¬FñlS­o”Àeýv¶$¸äCD"Lvx’žd–ÉÈ;ÐVŠgèí=ë¥1FÆ™ÏÐg‰1!Ú”ÔB­(¬{–ž¡®üc]êjÃ?¨V’LŒ 41Õ°ªRe‡Ðx4èÄ€¦ äpŠŽÑaÚÐl.yצ’a¤êÁ:V‹Z|lˆN>B£D­K9Z÷ Ù±HIQîè UÌqŽñ¨c:B!޶@ÎH á(”ÿ²AOfc^?cÇ:RÇ“CzÜìŒC ¹.¦ÙP[âéˆ%ŽŒb š¸AfPZ¤ƒ€"¥Q*JÜ„­8h±Qó“̨!r¡K«ÊŽ$Ø D([äd ‘2EÚð1ÐÈDZlÒ!¢$%l£­&~H+Óz›AN£d,D2%AÈvÜÖÉPu]€9¦OЦ- 鋙Ț$=5à]c²JuøZ¦F&£;XÈÁ¯yèÏ Ç:Z‡<T)3(‰]D†¤I£¼Pl_'%ô3/Lzà 4Müv¸Àm!ÙQšØÐ‡¬“´á+—½îÍt¤=!Š;ÿƒ2 Àv»ÛݤU}¿ñÓxk­gè¯?ê4’,ýò$W¸ôÍÅ:Ч:E LŸ!™&¤û½ÆbÑâÈñCõPì1(\W]UbbzoZÈ^¥JÕaÎFh-Ü®!°±ÆGÛÙ/Ï”4µdŸÉì›*¼ÓUÜ ŒP×PÎyÃω–Cä G:æ• üeX+€9Ï P%#ŸGJ†ƒÑÎÝPb5˜%¤ÜßfY÷ZEOjØ’0ƒHcщ l"d¸$¯„Ùï@ çÚ„ò¼¤ Tm~󾢕? š¿ “—½ÐwË„¦¯IÙa'Ifï3,­N‡¿W jÿM«÷]ÚÄ2°½dï«HGL´5-%G8œ”0†Êh9d©’A0X[É@VÒSŸå4"†F±Ì¾Ê¨©¿jÚõšÔ$Žô!H80ŸÎÖÎóš`*S X¥n"ÍUÔ2TÕ¨rn aÎ Tù§Ü-C”)€2ú·¹H9–íTµØ¤G‚²>=–kéxÔÀ›ß,g=‰—·úMžx6J„߯gÒHHøçtGY RÆ2'~Kú’At¬úkŒ5 ¸+>zÃ5œEŸì º>Qù£NÒR‘!Žvú…(ök¤š£Rõç“͉á+é0i€¤´ †ÿÞDKAHC4ŒÉŠH1­•÷C‡}E>¬Ð"+ؘ,)ßïgÞ—·`Ø0ÇÊWÆ@¬ð8sÙjnPÜÜêÖxf`:z£ pëÚÔ€?½ÂЬÃÜ8 @^‚Kþ¨§¬,@û¬•ŸÁwŸ”Íýù- ìh[ «Âåo,ÉøÛ  l£Aw´²¡áÏF+r’3Ñ`ô[aíT(¾rÕ$iƒ1†™Œæˆø*›‡)p£­:FBHk%TÍ*°‘È~Ð,ir\£|a{¯¥™¨™îJ u0ŒÀtå+"©’gðš@£€ÿq£pš°£ S?° k5/?0 äD"Kä#¡E; ßygT83y!Hg?S?q<ã]b wGÄ•q¿E äPluZÐrc0dITóB—ä 1Ã]rjµhHñ‚ñfjK&@¨&Uö.Ò'WWè!+çHpH)á}Ä*­vPÃ64 ÇÐBcˆfÏrD‘–R±1vQCO§jS¨|wKÊg¸Ò`p“R4k@˜ ùñ:@%È ÐP<"î!ˆ•x–¶ u„øxWy"ȉ¤T%â°x§‚”@â  °P)ª  uÿy÷2/[x#ÅAŒÑb‰ˆ˜:Z@‰Ž‡^h!øÐ0°´„P˜„IÈsjç^Re4Eñf#ÚB4Ú¢-Dá,©ÖûÔ2òÇM‚Ó&Ø#+¨Á~h¡ç(]sØk®&@ög C&@­uUµPå± ù…( …X4Õr“ –!x(dB`ô‚ÚÕxþg“·‰H‘zRyë0/D° |‘]E ìÀâÐIçÑ Q]P4‹=!@ÑA½B‘ºñ†XÔD529W±„q@ìrU=iU!Uþ·Œ¤|†ñ/‰±-âÇ Ï œÁUóM–Žl"Æ M(3ÿ¿d!V>Рπr²"æ´&¯Ä}°”ÇÇs­Åf¤$“Œq"šæBÚ²‚ÚµwµgwÞåxX‘µa)˜5“o6‰ò¨B e°˜»";€*ÛàeÐZ¦ а—IJCxEgñ ê$šKȓ삃0gÄ“ÊQ%l·%MVM³.²EŒ$*4†á»ÉM”2”A ¤‘ Éc-Ck²²&÷˜–©6”µ“R’ ft"Ó cC:´"Œ± |i}“ƒ)(ƒ)ž’ç—Ž÷fxÇ]xgwèéfßyTKw D‰i1—Kˆv;ƒŸªiidAHÿZ1Nr“` /S ŽVãU£‘HáŽÞ³kŽem.Ã0c/Ù0—µÒŒW‘ÆwUArYÕy ¶Ráfå=ÒEœ™‰ã)3)£5*‚~‰£î)‚Ȇ:ıB&"ÛùKrnY¤ùè0 u;x„GÓ=Ò`Û°õâ#dssPc›½´H'3VkbC5Ñ_«aHv2œ¨ñ3G³.L¦¦¡[µSÒâ€Q%G«(§âà"¥xç—5ªg£Jg€*¨†¹]9‚<)G`ÛÛ@ú ;i¤LÁNA¼Ã;¥;ptеFç!<%h Ù:¡ƒT€‘Ï¡ÿ2€¥kº¹MC£àC+ò=¤a×H ‹ u×[!Ù`¥ …q"±U©w*Q ñ éð¬°À¬qNÜ9ž*¨Û*£4*žŽÇ]ɶVB o—#@!ú šÉúLÊ;¸#Q™:QkTGâ`ÉÀÛbè4€$¥ì0ƒmXNàs=­VÎ÷=ªËffÂg’9’A…°6"¬}¡VuT[sŠŠ¥ Ð:QÔj¦1{àå])?Üʲ-+˜å ^åxœ° _‘68B°¦×Û ѹ.™ò‘;r:Ùà±wdÙ€Y|…0—9_Ä5ëPÿ'UC$ê]º°TV68ºo Øm†we¯Ù$‰d*R‚K§Òša«`/x‡w*˜.ë·[‘~ùSe S bWbÏ–\h÷ò 1jWÁ´QA0ÿ'~Ýâšyq0y!_Q&\”\S&€ä …”\ÍÅ4 ± ÕCrfàrP•¨(S¦]oÖÝÉ»µq÷ez(· š`*Ã{/Ç; Þ¥¼I¨€ë¼~ë­ê3~‰wkàc•bV'rL|A'‘†hA|¿°Rœs@¡-œË5çѶÝ0­‰N6?õy×wT;_1xDÚ"S.EV>‚€#ÿ!Œ B jö¹ £ê“£¹Ñ§"8(Ï Á\JïIkD1/@A³Œq×ÐJs’p¸h¿ÀH N&”G’mc ™‘™m’¢yŽš¶wynR–qòµqƒ°>"‹%>Â,µHM¸r#-·)Á·ñÀG¬ÄK‘¬g‘Þ¨ÚÌóLÏ£½µ¡ ¿z¡þq?±ÑU‘\̼)Ïœ 7€|ÔLK50È·šJbšÄZMd“C8Q 3ÐÁ…™dP™|÷]AÈË~Ú¼õLÒ%}^ÓϨ6¬pÆ/EɰjÔAÐÎÉ„ÔüŒ³Tšùyþ¹"vq%Tá,íÉØÊË Ì·&­ÔK-ž%†¡%‡"áÒå¡ÿsËÀQ5” @ Ê.$:Ï "*â±e,j«× ^~û }ËÔmíÖšx(æ“ 6#zÁ5Rò…ÅÕǺdjA7ÖKq ›z§k4§sÙsFϾüÖ Ù’G¨‚Û]Åccí+#z†ÑZN˹RQ§ë¬U§â`"'+×°¼~j^‘ Û±m£”ÝäpQMq|ñ ¡™ÛÐFpãÕ¬t­Ó*ÅÒs1È‚™Ä²íÜÏ]‘÷|ä– mÐ56‡¸ŠÜÌGÄ}ܨ-E4 z›ÖéØÐÞéͼ꣼?ó Û¦ÇÄë¡ ¡ ÂC¼Â£~µ—²æ-ÿÝê à‚l}(`(†Šà¶Ñß)Ïîàχ2ÒœØàná.¨¯­ŽTŽáâÜê­ÿ]Jâ'Žâ,›T&Ξâ/ã€k(ÙÜ1nã7Á…‚ã;Îã=îã?äêm$äEnäëó oyo‚GîäO~(úðo™è™ˆÔPŽåOþ ÜÅåPå0YåK ÀYnæ>®eð3ÅÓI†Ã åp 0)æ»[1JägŽçþ ¸u°m §ÜS¢k §à3ìPìp îu.ædŒy.éþª {° {ÐѪ « u ;%€ævecÐ å ÿ4¬è»[åË=é¯îÜ• °pé±` Ò ­¤}§ö=0`pe˜àyèWëå@/Ò°®ìm-ë{péÐ íÓÚÝå©;Å´Àe `eiìW‹ºÝ¬¾ìã^Òú° té™í¸.íÃM[xÚ( `0eW¶í3VKöÀàå9Cî¯Ä¿7mÐçt€ërTܲqTØl$ Xõ>cÐÎ= v/WKædNð%ÿ·R¾]bÊö]§s¤ëÕòØ[ØLë:À5ï¿^Ÿï/ðäP_C×ê&oô2šäùSÛ@³·©çŽ´¾#ÿ·»Þ;¾Ã#ïV˜àë3à Áš Éd/%R<ÇpM~ôkOp8³ä Ô@³†3œ€+§ö­;†]Øä§Û ®ã:œ@Ô@\`ðõ¨0x ïo8ÅC÷eHbþölù¤¤ö¿ø’©¡ Ý0÷LOø®sÊ€_¹y;øªŸ ¥põkP …Oœ§0º3`ûw 3ð€§R ÝpDÛ@èð™ü{²ùµQåo¶Ú †$<Ù° ¥@ 7@øÝû¯ã`0<¥Ÿ £ø(.kÐ ’À 7Ð µëoûï?Œ¿ šbÝ ù* Û`Û°ÿužü@à@‚ D˜PáB† >„À¿„àÀ¶më²IÓÔ ÈlÛ¤ñÆNd8±$£ æKi.Él³¹íFËn6»í$Ó%<`ÞhZÖFÚ¨n&³•Û-›¼m! ´(QëV®]½~VìX²[³f`q !ÒÜq„VÚ6MåJÎ͆i&•{Uþµ4ƒJ0Ôn¤ì&©TPÅ7o³M’Ξ§f,Ó”LÓ¶lÝž–Ìöö£¾´hR,›ZõjÖ­]¿ÖJºáY ”bgR9h½å‚l rÛŒ3ôžÙ;#pJN3,¿<5ôgËm™¶ý —©˜S.)ÿiNÖ&ÙȺ#¡±Ë&u]Tr.ø ö|úõíß§/ÿ¡E‹LlЇ£Ðæ‚F$ß@ã,*hfˆ€Oœç"ä®ÂèzZŒœ5²Ë§rÊ8E“Þ4“†<‘¶y¦œd¢r/}È‘Ò?oÄ1Geƒè,‹ ¶l²ñ¨ÄuzÓ„œñâ‚&™gJ„†hŒ<x€çœcIK—"Óî&Iì £Éd¾Cs<@‚¦ß49²7zÒ#‡žÒ®>ôÓ±O?ÿT¬³:K#‹¸Èˆ•à²ç.wîR2*¹š¤t¼dΜòJ -C¥B Ç3&J3¿+SMÖœ+¤¹(i1*ÿ{žáLŸlÈ!g„ÒfH#ÔåµW_ëÛÕ,¬. ò¿ÜÄÙ†œôˆL/™8 |fEK)•òÒ4%9ÓlÓäöLo)‘iÀq3$ƒ†óè‰jzȱ¨ƒð(Ø_ïÅ7߈ìEè,Œòw Jó¯Ê.8ÚfÑX¥ÊÆ©’iñ¡5™l¤­TTk/ÅÔZhŽI¦ iÆ·äm’·ÄôÌ™ë™V¡iô£Ei¥>[ª€ õå¹g}ùmX€KÃÈ¢$ˆMb¤QЛ5“gMVŠ¥ê Þ¢9Ê“£ÌZ3ˤdIÆ›lI– {l))ÙqÈc‡ædɶ1FšÉP¾ åÓM'=›É¤*E«5i”.YMR˜œšpa ›‹hçÀ‡'ÞO‡ÅH‹ªl2=­E¤¤œQ8Zo.zSû¡9Râ·“9†·ð.nrkc¶ÆxìñÔ‡†}Œ)á­MrÊ•g¤dæŒjλiÕ{ yó<Њ7@6D6Ç3ÈàJS¸T #Uj%þa©4IÞQ*˜ È)KÿX{£ª9¬IœK†\.¦ÂIKEŸûÜ6 ¡¢©hÑ[/Ʋm”áeöÿ¸F¬’õArpÄ ¸J ¢‚` o§)`¥X_ü«4CsÈñ’G¬­Q‚|KzÆ©ÄãÅñ$iYNSùž¥¤ÞtÏép’³œd 6&£ŽlÄaûhxºöá圪¦®¥ÌIÏ`×6XAwõO ô¢B8EJê #9 V•àc(ä g±¢FH,ÿDi‚Ù8Ÿ¥¢¢™SN,ÿ0ÆÅ6˜°^, L {1ˆY¬—s‡/_˜Ba®è6<æŠÈ̶ŠU©z y33"vƒGŒ‘¢M0Q N €*9Î|a²À¤F ØIÀG¥‰‘EôôŒlñdÉÄÿõ¹6YŒb;†ó¸§ çeÐHÇö¢BŒ‡ ŽÏ8Æ:ÆQ’I`Çx‘ÑöqT¥Ä‘4·q² ô —r¾ƒÞ˜…mUìwfއ-XNGC‘(X&/ Œ^Ò0ƒr@xî8ª”K"Á'Iða#~凭Šnôµë•U++‰%¶¨!‰ð•ìI+[ç]µ Ò¸„T#!*õáË[µàbÐGè›Ã;9Ý€\˜\){âJYËsvÄÚ,J„—½ì·aÿ[« Ã(ú«f6âÍÌfv:þ« 8 ^ƒ&bJ(‡83Ø6rÒgZåy‘¥I ÉǶÛÞófòe´ª61ªןRIGü"Ížu\£7ok㈪{?±÷&–‡Úä!2I¬£dnR:T½™L°c…œÞ(èÑr”!3ÈR"wk?£E¦ðù@iÀ)ßšŠ³ä•A¶Ñ†Í6Àâp¹³¡ýlÎgƒâÈ4æ,ô<0‘HΆ¤y(º;ò¼\²5=èžà¥î)­g0½|ü6q÷Ý›EY-­/ž ½uGŽ ö»ö|÷í©Öd¶Žk‚=lxÄ™< jŒâÿâèF)ÕÃvFü’2”gð\Üg'Ç«L_&Zd` „âã+yÉô®a¦¹Pؼt hË«¹û¼Ñƒkë ½P=×ÛHª@:rr`‡Ù›©P©s!ô±­ ©Ñž&!©¥á?x—¹pš’Ⱥ’ Š ªf‘“AB´ë-‰—Œ2X«›Q ‡UXm(…uº`Nè!v(…¢b;؆¥‰Âõ*N‡(´zð„Ú ¼ ¯xúš 3ýÓLº¤%tB2…L °8KÀš+@i«¹L=j«Ž–¨‰—H ½ð„h< @„"Úw •„ÿÙ@ÚËè;%Œ‘Ĩ®Š êk2È "ï+…(ûV ™n[¾k ¢’(¾+L$烆k€œ¹hƒë»ªí#‡ÃâKø‡%” ÍˆE¡?_ü.?ñÛ†ð ÆnàDcTªù“ªÿðü³4ô™]Ù"!(…epÂéa ÿ#ƒlø,8„CI˜C:¸9oD°=\œh‰”X‰8`‰ É’@`‹Í@Dv‡Ya¯"’¯“ c€´8j¬ù+óˆŸ@™Q(‡7(ªuˆÂ“R…Òb‡Vȳw™•<+‰x𜄆±››té“ ¯Sù(r±» jÂm°„uàiXñ’B'ä(lH†ÿ\I'´»Û;€Âl˜É,tÈmÀ„BÀp­*9 á$ Ùiì™u‚Š¥(‡–ŒÂ7 ŽL`› 8L0®¬ŽmHGëKœè ăèèNi?8“xQÜ{ˆ±K˜é£ ª™¶b²U|’W¼D޲bô¾P(Ë< ƒrpDšñ z «¸¥s[EXl2 jˆ[qHFN,ÈÙŒÀ,ª\4‰‰ }XÂ7x2'“Éñ“2¡ÂÅb”²5°ƒ ˆ£Ah*Œ¨‘`sJ@Qž Û†ePȰŽlX†Rð›èÛ­nŒ‰›p‰íËÅPÇ p .Žw´Œ5ÿáÜØHÎ y8"™J$Í‹ñX¥TÑ “žä,‡(¬»RX Z¸R¸\¸7˜Z@:)"q°ÈòT–m Š©®t)#”rµU —&”N@/ºX¤Ð˜ÜÐ7ðÉܨ)‘ø±šô¸†rX©ú\Š&̆œdHÜ B½SVXƒ(˜¤€¼©-:ÃßœBùµXÂÜ8¹(®á$ŒÀ †/éÃhÎ%]În 0 ¡X ¡° ¡ÀƒS‰§p ÑHÄ"Z>SäŒèc«]" òº  …QMrðÄbLL28…ø‡X Œ›ZY>Ž˜2šy°å[B…a+dü‡ÿMÈÌ\¬\t5ÒÄÅ%¼†Û¡1©i8»!}ØŒÀ ¢X„j€†” U(Â؃V F˜£™²¨X ‹Àˆõѯ¸)„€ÙˆmÈÔj‰(lÑäÈ6Ÿ[‰åPîŠžà‰œP é\Œèà„2ÀŒøT»X†lÈ‹ôSy@äHºh(‰‹S!Âð|0i°ƒ ŽV<£4<´ <ØZZ dIBò¤‡? YÀ›E‚½«J”’ÂJºBX›É7HÁF{X6²š’AQð ¢ØS±PSÕ»éÁ P„h(C0«Uá$ÿh€¸„ #e’*lЍydÿõ„H‰šMK0àÒ °2àLÈŽíø‰S ê Ì(©yÎ ÝYqø ‹yE“¾‰ûËÑ,Fñ“Óõ€‹‹?p#z'›¿œ Ôå«Ïh…r8¬£RiHÛmHÛ!ƽUÁ*}I*‚™Ñ¥¿•!N<¾…œJT&Û ï#B\ŒBE)®![F‹ß,YÖàÿ’õ†P`#s9¥(‘-ŽÉËPiåN%ƒ Krx֞Ќ6Á!ßHô“n%ú¹ò© ¥PÈ“© ; 5™„ j…Á+–Ãë‹ØøÈ5) <Á«’D¼È<ÿªY# ¥B EÞ:@ -ƒ…-ƒ(á­Þ(«#WÂÒ «ˆ½nhºAFÐI åÓZ–øYǻܰP"¨Úi¨͹ÝN(±”dx=+€M¡ iÝ5Rœ€]ôñ–Ì‘¾l—c""ÏïÓ@¯2·*\” }á:!ÍäF5ÆðÚ ˜?Æ‚û8ù²ùÛ¯]‹F°’†uˆ[ÍìÄIe²L HàÛ6 \J0!Hб(Ñ1‰1!+^Ò¾•â‘07ëƒ7eÔÑLP¹´œ!™Ü‰(`×ΤœI)’FÑôü'joÑ’hieÝŽ ™oùhÿrÑ_¸‘÷¥ |T E»“Êø¨½;7¹Byð„,!J\£/è5e(eà5‹pÞé­ÞÂ+-ôúÞ–¬Y¦äô ¶A ɃžÒ𵑆R™ S»¡Ý’¶É_ëÈ ‰CÞøA¥äÉy°4 5hÈÜü›F } UA9 Ígü)ƒŠ˜i˜!щôxPɘjñ–20Hà˜ïؘ4±–‘ÑÉ„uÖ„á ‡é[„9Û`ta9}EüM\Ð|Ôðü‡rðÚ(Øá¶n²èÒP¢ŠÆhú²²ùÛ€rø‡Õ¿`h¿„J膼%cN{’#ûâ/ÿ)&™ zS©¾ê+ã4>«Y¡·†y‡Á?8îԈƉHên‹®©à Â%diž•ª9抚¹Áiõ½­Cέ(Y†Gøå²)™qÑšsaäáH»©“õ_)<•ªkX³B$”ÔºD(€Úp^^ƒ¯ùZ¼ø:å½Qeúbås©(´P1(©ó:/p)I´™¼e¼°)«Â§læQq}æ§µá­0Rëhƒä\!I.:)¨é³p²Ü{áf{ÐfŠ`êˆpjb çpf þç¹ð¾’ÐÈå ––Ɇ!i¹¡“™zNppQèf:«òMÿà!v•»d)h¦2KxT’V˜À ª‡.<]ÆŽÎèÖ²ù¦è¾ l*[ž¿rˆ{S;p‡N”$ ¬L@ÑÈÌ2¬rk¸…“1˜ p±é­*®º¨Hl·Þ¾«JE‚Fç~»»˜Á¿Ùmnêo&–à‚G§V­ëÕ&’âR–ñ¸šFc¨g‘‹ha±®nŸ­y„B뚬 ò¯Þš$A!ìÀ³cçm­Çž5þÕPvxQX¶ÐVøeÁlúBlTž/Ã^“Þb!¼£¢´(OPIˆûeüÅ ˆ«BéI:VKäÂìí}^_/’’qå§Ú²Zköÿ%%‘˜êq›ª‡ª‡%y–‘mœÒæÝ&”ƒ(Ó8œQRUê- ¢ÔÇôYI¿Íbv‘vvu” XßšX!2ÈË …Û¹%ipÌuÀÅÖthiðħ¿58ð),Îxám8¢Þh-c¬°e'FXFAÀáPÕí(‡ ˆ„nxjت@i’öm¬€³â‘ã–®ko(™Ü»ª#òÁªµæq_ŠÄöªÈ”Šâó7.¦vb Üþ›E ¢¡§Ã1tJ¡^\kÍÈ3R¼Áë¹ê6r„ú§G–ø±£™&´P)1À:y)ÙC'@¢›#ÿqkÉdª.¢u˜µ¢ºy åBz@-O;10/º $ÌV»QÐÒóÄŽ1Ôy<Ý &‡PxÚ§M‡: :¥ $DÂr8rÀ%‡S«îV«›·Ûå@7ôÎt')™ÝTjž9.ª’f!.†Yîæª_„礞'+Ê\Ãq Ã‚K·ß õ,±—œÛ !€ó'·Jg`²”az!cÀü²!I°!"¦â¡^Ú Q—@e‡G…2\LðD}Ô6Õ ÒL®¾¾È܆kØÌ„¡¯ [0⵨…8… ážt‡tH‡sˆ‡xÈxH‡æGþ „šv)‘@Xý‰ÿt‡Õÿ繪¾«âSB|vã Gü“ÁÊü½h© ñÈEâsz«Ëh¹±h´ˆœ¡\'ŠXøy’U€p@B’%£´-4JÙ&Ë-™¦mÐ&>œ¸p"9hÙ¶I¼˜Nb¶t¡u|æÚ³dé’µ\Çð˜Lh’jS§Ír”¤=ò)M’φë.jb§R=hÒ˜f“6ŠÞ¶mÒè‘ËJ¯b™­Òº’ùJO!¥­Ù4ÉkéÅ6M¥A“'q=qä¶¡   °àÔm£²¦ƒïÜ>Xûà峕ï\äÉñB¥'®Î\…œ¶YêÆ‰+vë¶Ñb§IZÙÕlBÿÌ(‰µÍme’IÚâÉ“*b4v,âÅlÆ‹[Ü–nãµdÇPB;@€êªWׇ};÷îÞ¿ƒ/~<öz0?B/4 ôâ|«1”ÒâÃúÆæ«ôÏFÿ$ Gÿ\”Œ>,AãLÉ8øP„îæàBBâ 9”Xøˆ…®d4Ûh""‰ Â…à6¥üCÎGÿ°ãÓ?t#%5þs£|Él‰Šš (Ñ?ÏX„ NJCN‹ÛàÐxPÎh‡­-ñÜO/=–O—Á,é  ÎHâ„"ÎÙd²Mœt£I7±”c9"ú´à6òÓ_2Òøÿ‘BôA´ÑÀy3ÑIs±Ä#LÐ˜Ûøb6-!xÑ‚ °^A`7€v䡚ªª«š‡ÞÓ¥kAIPFÇ<ä\F?Qb+BÄ©$QK wMtÙ€³ÑGc4&='¬KÎMD8a{m~5Qr”4ni²–W”¨M&^Aµ"VäÈ2–X³•Å+=°FO ÉsÑ3o±µÌk×`8ô€^"¼Qe)ähBŽ8f†¹å—Ž1F±™ñ ©Ê:«°)Î(pž•MndÕHZ9ëÃŽjOÑó ËávB¸Â(BÅÆ`oú®4lqâHóL6âð—Ž‹Ç=gѰØ]g]y«BÿµÔ±´¬VÀ:Ÿ ö}åM~ÿnüœÒɈ¶G˜’4R:©ˆ*‰ø=»Ý½‰”ØcÌŸyóÍc{›Xbœ%ޤmüø8ݰHɆóMΣÎÇZ”ލ_‘#Rj¦ä”#SÎÐÍ)䌶 9}Ä;eY¼e:f¢™Ù:â¬sØamlø'‰ÖI|ݰRNVëè“N=‘ÖhÛ<_2~'š`§Ð4`‚JS*M6JnsÍÛ aê,‚ !x *èÅÁyOO]¿ýÝ™—Ã{Q€ï‚»A£ ´9nrE3h„7'Kq$‘h9ë!YÎG µ’çE%ÿ/±å‘|Ѓøú ôÆU®n­FãrWØñNÐca*,Ã2f”±,ãò Äñ…”·”Å)РGTèâ¢RŒVå8ÅŠ²ñÈcZJ§’…<ã?IßÊ7:ã H% jÉ‚&¢Ý,è!~’„Ÿ’8}˜’¿üÓ2ùæevîm ÿ‘Š8ñQ”Ã`“‘åæƒ¹nî¦q2¾å':ÐÈ`2¸z”‹|5.¡„ÉšyðìàÕZY³¢Dª!ÑVèê iÁ]*TW²W„Èfòp[X•©˜+ÛàD!ÿ˜È Èmã ƒF)<&ŽLø“MäàX(\$MÔw­YÎø“2ØÆ´ÒC[åI4Ò¡Œò`ÇGäÑÈDÍL©d[:ÂryÂ…î¸ËOòy6ì0 ßÇ'Zß ¯"®±MjTãƒ&Ô¤µ‡BVrèãdìp\UBÚÿ©d”·œ:‰‘—å^rÉr*)‹Ê¡¼ ltvb `g=Õ¡iÁb¥Ý3wçúÛ¬æ€u°ã$ àn’A b=!eÈpTÒ‘¬%!V"bUiPòXd¢Œp5£ŽÆ(ª°C ¶MÙ¢%’¯ádÄf ÉJžÒ¸”)ñv÷(¤Q U†¡Ørqƒ6ÿ´BeY ÷ò²!]¦!¼º¯ª$šÑ¬Ö(À{Pu}ú› ² › ¤ S‘ÚFj˜QCIYaéù®)ñÑ’m)‚ޑ׾’ïHs6G9ì)k.ƒaÿH’|¶9ÝèÖ|°5·a£{Žsuú0‚•þ6oEî¨Ê(º‘nŒ¨*7b6A Z¼‚nc 1&³Ë!n/¡ÝXCªP«, 楾‹=Vn µIï$zÞÌ·Ñß…4îÛ>÷Ý?:»†¬á3È䆜K­T0í2vÀ\1€TÕîÓ_ äU¤U°Žu,ºÒ¾ä³'Ò’“rÿ–.®œ‚Í'žšv ÇiȲCB×#†É¤ßr®“Dš) -[ÕB#7)ŸIÊjî-ÏRÈCž¤^µ÷Í){?Çe…±ÑE6øk…–X,;hAVçÝvªw½yE ÿ 4ä5ÐËñ@‚mC ·™‘˜˜Ñjp]¼yUÔÖ]lƒ\°ØAÃ4é »ÕÉS€¿XP¾!Q)pBР$ `DÌ: h€^LW$%œVÇ$e‡ée—>„ÕPÖdtA¸±TÜ´ÄÝ´D’µ„³äWÜ|5E…¥p‚q!‚©B7„ŒÀ|©Üˆ .H©MÿÉóLÝj”7Éø°È·½Á?(D~[Ó-ÖÐEÖÕÆ?,LÓ‰† ¾“ãtüCB-"ŽdÂÔ% +ôÝ6”è$Ùðø^5hÂÿQƒ&4%hâÿÕ 5@ Ü=½%”i ”*r…•„ ï T6”ƒ9aJüÃHXŠeT[tJÔˆTâŠ"àäe•˜‡Õ8É : z8 ¨xYAL#çU‡ç… vˆ @éaýäBATǾ _¼Êë¹È¹1qì è¸pÔ EX¼ÉSi =d9¬;dB)€A"ñÑÃrúT4èÃÿ²è‘(‡qÂYè¦0¾5ß55Ø?¬;¨‚ã¸>üÁ]è¦E|ÒEÄÛ6nå&k`.RÌã£ÖKq”Úø¬ËT_©Á-¯ÈZÌ[RTŽY9|-Öê… ˆj¬BÒªªª«b‡ìV‡ÿˆ@^„î@ª.\Ïú¬w<Ü{øÖXÍ"´0ïÀAÏ‘+5]Õõa)¨Ÿ€¢³ÆŠ_¸¬Írž^6ã´2¨Õ,czÌ@ Ì€0ò|˜âÛÕák Üéiõß$ˆ\ÿ¾ëD8ÓZä¯{AÂýë8ˆÐèGH¬u)IŠ£@DBø)åþŠ$ø©4æžVáÊgâ|’E˜ˆ1¡Ó’”¦5ÙÁÔE/(Y¦¶²Â?tÃÑ‘CËê ÌV‡…Ö,ÌÞ¬:É1ƒ!@ë yD7ïxüBu$Á{PI¨ïÀÊšS´4,Ã(D*He¶Aÿ9H¥JLÄ]­Öþ.î²*vðn\j-ztªÁ äʀߚÛ B;|)¹P‚¿”ËnZŸJ°Œ"“E kœ®&œÅWúË<‚–UÌÑ"}•á>CJl);Vð¡Hop0B€kÔ*‡Å ÃKC|œ+ªïKT ú(ÖÚÒ_ ¯Œ*B-ûÁP¦ÂÐg VA¼êíÂjuØ®í†jAd­{­×òz´Þ?詼Š_ÜT‹Ç©œÁŒ` Œó'€'€Aß‘C:¨ õfÃlž4PÃÆ)\ÃÔыԀ2òjÇì?ï0…ʪƒ2¨÷>I”TÉ “Ž5uÒ?H–ÿk–ìÿ¡H‰À A$X4ß8nFßMB ˆB=$Dáý§ÈçEé§‹LaÝ@CdbgG—ÇYÎ(Cò äÆ <ÂBÊB؆|I ‰D¦D¸‘¼ëê÷i™’ü”çxÎlÚð!JVÓÕ¢bŠ@t@OèË1ùvÁ­žÎòÿBó ëç*©¸ä€7r3w¨Ù ”Á ppx Ìu7Ü€Vh1= ;<Ѥ®†*Ÿ>„ ê®;œB ì¾Ê1Ûnª.³À1Ç1$@»„›[dakJ`±L —ƒ$,ÃÅ–ö†$ÄŸ$CN÷ ¨vRÝÎ@r‹°D0"gÿM¥Û<×:“„±0DõLN(YWðMUr#÷M£åãI¸)THAb¹\°FÎm(  «)´¡­t'*úÔeuA¶^ðu´zðOÄ]ñ œ]Ï€6Y³hœx›MqGœ©´õvåÀ ŒÂ›Ð›ÀI7LªÜ: E‘X˜IO]#ªýC+”hÿ|/s8@÷°?S‡“ô bÙ:°‚n®âýþŸ4\(«<ð3‰ÈWüküÒEß8Üx2(,k4ÊW öÜíZxMÈl Hl˜DSƒ$ˆƒ D’=„”#Ùn.öL9…–_¢*ò$ÄÛY”°ÿ1}Ý(è&9\C‡N<ØlŽZ…ËÈ ºæã9}¬8Xãžôø:ÉòÖ€äBØ(9ä£>Èœ¡Ìëu¢'ä':9›­õÇ“Aì8p‘bÀ›(ÏÀÝÅ0Ûh“ËjLêª%…ÒÃ)FckícÏnu¥ê1Ë®3Ï¥×Öñ×’;3™²Q&@$]­F^ñJäÚB”öŸ$»éòÊ P®à F \øÊZ$äÐüÌI`éDÅsèKWA„8@OäÄXñÄ–E’ÙDºó„ä8E¦µ…·LÅa¡-‘ ÊSY, S°Ëü„¸_â´LÙòçf 9 *ÿ_È`ÄIÞ\o9ÄB<«*ÄÃÃÀÂî¬çG¨‰­Üh”B¯¥£odÂ(`ü–pQx™C çÐÕëÔ}Ÿ!ΰ☇†Cè@[5Ÿƒ8ùþ¹ó6ïXS‰9<–%èX'6J'FæÙÃãèG|4ŠÄ8¡ˆR×ðJ‘ïHn®qó‡~Øâ‡€°ÏJC4ù.5ˆÍ8ÈDL•—ƒÍ\¢1\"’Éý—È„”°2}„õŽNÊ¡%˜ÀÝ„5âóÝÈ‘,ÛŒÏæy™{5÷ºª½^<؃ãhI>”I:ÈCîpüa„ä"ÑØ[›<Ô\d©¥Ç7LEX‚•d7°­iw/Ìÿw =HRHTŒÁ\2W6vÈqëùE{ÀßÀfÚ¨ÙküñLÓ˜±”r½¬Æ ôr[)ĽlÚEP*ÑCÃWØŠñÙÙ<HhUU-‹À´tìFK¼„·k l;ä‡þ7ÿÇ @@ƒ´.4Më4d—MÚ(y 5Ñ˶l=réi’I%i”èA’F†¥e Û|Ìø¬ =hÐ@N„Fo4iòÈA`À)PÀ›äJ‘[õ©­xðòõŠ/­|éâÁ¢šn¹lâ2‰S•n¬*q°È¶±€m[·oáÆ•;wî?g¶mKšmݨmœþv+ÿÕ“=N„ÿm+Çé_6ÁÿZu£ôOS9Mÿ •›œZcqÙçMì3FÛÒx !5€% xs£V™Öå·.]ºÝâÈ=óº-¹räZ•;UΓ»lšÝ=“¬¯2%}ж•¡þñŸ1heþ%ËvŒ8´dåϤäM¼¤šækfK†ùeøg³É tÍmÆhîP>wŒy&wÄ[°A|PÂmŒq‡¿ùSË&M¨“ ³šÛf”ÐÈù'm&KF³ðV4†ðÈ› še.î31Ë/1¯þ!G‚Ö¢`‘ìàä¢V!+¨ÒÉǪXöÑŠ*x¶Zeà I'ÿq¶D -UbÙcì¢ËÌ3Ñ„Ë.rNasK¶c›“æ0À@ ’ŒPÌH%"jc›ˆ^Ò„¤‰(þh‚†zÚ"¡§Ÿ‚ H!h¥†R4!Gœt´Š%«|àI‡Ê©TÙª«lýëÍrZa“vÈi£‘P’F’Œ`Z§ ˜È)¨ÁdŽ‘ï÷ÊHÆ=õäƒï%ñ,(ÚE_:ñ¥üø³v›E\šåS óä¶Ü^ÍU¯$˜\‚f v …÷#y4¡‘„ÊðSQiΠ‡rX)I×uÁXwW8¢&y̛ɦL\’¦¥E³¡)›G+-ärÎ`JœU>Ž'U¨`!5ÿ«¨Ü#žXÈZçâ®¶¤ƒœ-CYg˰èhƒÌ4yîY.»r Ò¸ OfˆcTÈ8…ŒË’nÀƒÄÃâd$§ÆA?Ü?Ñ€+ÔT{‘þ¸•¼¬äM•}¨¼nRó9g§¦:Ç·ÏĹfÑm¤Ùæ ÂʱcÖnذH®ã»ù ï¤ýR„i¿ô’™ï¥Í9IšhéûoÑg8ûo[hôIæ>Ìž1fÀ40{b¯]¾?pP{RÒÄM½î#}2Ù¦ ̺¹LÄŽ“Å(y¾ŒçÏ“qÑÇGVÿ#§™á}ºÉëßQÒa9'§:9žOõŽ…œÿUµöï‡mŠ'c÷Öà„Œ6fpñùŒ€<è(Àøvx$,IŸÄÐ' *L 3OÄn´ŒgXìQ䨥„’ˆ¢€€é VPv·¹¡ìVqŠVz ®€,ÙpÏ»! i°¢ë ‡,îõ'v©g ‹^æ$!b5KXÏxâµĹgpKuÄ‚Æ5ˆó·lm+éO2Ä bð'Zéx–· 1&¦ëƒ 9HB(1Á^) üH?’DBý…v ÇÁ摃ACȹ’Á+B%*bLjXEÈ! }0å ‡9Å6.’+¡‡dIÇ*Ò±‰Ã/£ÿøÈGu 0pbž˜e-h´ •©€½<“]0õ#+Tj˜K í¢•ÁCÑKõw=í}.DÝ¥]‚ÄàåHJWÖá>¹• Q¢ʲ²•߀…uGôÚàC㡨mèÆ¿Ö8{(¦FZûÇ3¸ ÈÁG<•èy6ç†)ô> E(vÃÆØ¤GüaÝu]Gšòá¨1r”ŒÔeƒqüDx²“:©T ©ƒIãŽç—Ël£žøGÊ!‰ðPC§Õ 8 —É<ÃqÉûШùj”È8`GùLÈŸ:x%}¸Ò)¯ÄJÕï%ÑH$s  bÌÿÁ`—¾t+]x)ŸhÐx„ÀîêDƒáU`”èÈF<8“gÐ(b„BÅ0) Ðõ ƒ)E« ©*ÁbçpRÝÒyŽt~jëHRWdÚªéE™af¤1=®Ã"ƒÒ“±ï×Èêƒñ?T˜ÀµAÓ)ð¾ ˜/û<1ˆqÌø#éôÿ2×(Lj AvÊÔÓ’'ŠüëWš¤ ˘‘IÚà$ÈŽFP ïžÜ*¬ àGÐ'8 -HîæÎ—Ž…˜è âb#Ö%¶„…Úë\üjFÅŠ$¢!$BD†ÎPÚä0LèNìDì Udª¬®~:¥•LPÀK´¨fß(HßJKÄÿ çô"”ÄŒˆ,"ä6'\DAÌã°ns(x"3 Åâ…jÐPþEèb%`h¥Û´Ì„F.>ঠ¤‹ºB#úH#À@^"Â/88!QØaìÅçþç€nƒÖá±öè~îì KA<¡O4¢‚¶¡]ÅevQŸG{DdG:ÃÑê¯XÁ£ôò¢2®ŽamPt°U6±SjBbrâsr‚F8í#&syjÿ¢›+_€ç=¢`<‚$´¬à0"'Èáøã!^Â[œîå)%,Q„6 QbüÈP8ÁêLn.f ½BA¢Š|åýxNhŽÄ¡%€gØ¡l £ê*ñ$Rk ì’¡ Tq ° ˆò$ømj’!Q,;fň€Â'ØN*e±©²ghǶÒ#BˆC¥ž <|j?‹±úVíŸ2Ò-ëïÜÌ0¼¢Ïì‰!€.þn TñÖ$Äצx$!j¾Qžì „Ê2.1 ©Ì$&p޲¸gŸšOà¬1¤éÎ ÂB !{¸†¨4‡khêËhŠæo2îM™Rqzäš¼‡©®ÿIDãùBcÑŒêN…Ò$ÍI‡ôÁ´F#¥ôùuÎÔˆCw®LPFÁ£ Ü"8Áò¢èAØAóÜXEÿÀPȎ쀒ìŠ a(×#ˆ²’A2Ê¡<¡MAéOˆ…Ä„¢­âÓ(@¼ã’ ¦Ú2ǯ˜HAî(¾NÂOZ‚‚"<Æ£Lô%ÞãÞ¤!î2ˆþ’™à$ß`MkÄ×™’'Êà4!å#¼ÐP(†„蹜°PÒlPbÔ2¾LNfS#é…D€¿¥\2G€„€#ÉËÒxS‚Ôq ]ÃŽÎçµ^ e 6b‚OZ¨e‹˜&…ÖFty((QŒA#¨[¦¦‚ýÍžlBE¦µ†ù’ÿÂ3BMBˆXìY4bCl./þÿSâvÃt—€r!h€XÄâj‚v‚e¤þšòSe_bõÈò ó¼B¨6#ÔUâzµs8ˆvƒ(v±‘¼,&2‡Ö6µŠS8 •U²ÁP5‰òˆÏÏ¥é:ãŒêúP81œ´Z¨ü²'X¤p/ÞÐa>'å( ¹„î±"Âx%‰6cp P&²Ãáf >‚‘øù{× i-@ø2ÖHMp´5ä%àÅ<UAŽðð2§† ¬–Á¦M‚ ÌWYzšXŒXcínÂÐêÐôaš}f‰¨s Øu°£§ ÉyxÅR+G“!hEÈÁ¼³as–ìLWHW¼ã¨ž¯zŸ3uŽg-±Ÿ“Á:)(>¸pP,$w~ÿSz64ò–14TF6ò2mÔÂ/ÒØášTïP[A WYÛQúi>Þ€äÖ{#ÁÃ-Ï_ wÛ‰‡„gM$ H±wÚ‰£ÌôÜaÊ®Ì-QÒtj³ÅBfoP…—ÿ^í:)誡¨¸µI(œ²)+Ä* Sj>Éz.È‹6§8Tî%Êà\æ;:BYÖr÷D YŒŒ”ULîðÊa°–dž‰Ú&Ê` {¥âyÁÍWŽ­šŒAøYÂwؘ)H¦½Ãó Â5'É )æ K(,ø ¤¨ñ¥2 EÙÁ„Nü,‚à†ƒaºe“« ܨ5Q_=ˆPÔ—OÊ'ˆÿève¥%¥ÿªaÍ¥QÄ¥?«k&ˆáv:W‡p4cø»$æ’¥Û¨…1#ΉkBu"³ÞLXª“%Y(<Ê{—ÖÎîXãÂ2`R>Àî*Lr`¬Ó;MÌÚx‹ £ûúà‘?dÄï´…?Béb„«´·ÅBzÙâ$'®C3®£wñ£>Ó#¦ ÷L8…½î¦=¢Ú—­.:¢˜Û0pB£nc$=ÄÑ$ 1ˆ(ø±o-.4úCH3)4ÄŒö²æxT„C6M˜ïd1§˜Â¼á ˆRɘþƒ긭óÕæ¸ 6p=¦F Ìajš}j´Ãj„PÃÑ¡ ÄAû-Û¶Û²eÓW𻄡AK6ñ˜Ä‰Ð,KÆq›¦œº­ú·ŠÝHqÔJ!,' aLP€M2mêÜɳ§ÏŸ@ƒæ:@‰ %²»(O"%zФib§ÿI%vm¤bWÊ#;iRéµ±˜´mâ²IL§ZºdÇŽ¥Ë˜¬)´§QŸV…K1Ù¿¾äún£xl04Iå(I“ÔR2Æ”î¦döîRhšè% ›mÙ(zÛ¶‘£GŽ\殟»–¢WŠœz§¶é {ös[zj·‘6HoÚ¦ÏÚØÅë5jve¤µiì‘\Ÿtàþ‰#·Šœ¸uìÖA’VFö6Äš¶µ)÷ƪT«Ë&:ÖDX1dî¹³S\†Ýæ§Ç¬j†fl?4¨Ïü·MAñ¨• n±S™4E–QF£H5ŸUTm ;œlSRÛ”ÂÎ(ÛpšDf½ôÒL3é¤OP,¶è¢O¹Øÿ´x„&Z6Ò\ãND •ó4‰Ô%‘ÃÉ?ÒtóÑ6R”LBfSŽDÙØ“P2îP Cƒ$NùHÐFqô×DSf“L9O®ù$bO–Áæ`lª9¥lî<3˜;ИFÐ6£ Ú?ätCÎJGJ$4Jþ£ 5­!æY?J“Í?Ù¤UäA¥Êä…II”˜£I7£X—ÎHÿ¤sN:ñ¤sÝt©žUVh]1YÊtIÓÐEm”XcæPÒ˜;$f%A&Ó˜büE_O•µ aª=mc¥¡ä h­GRòÏ3Ô˜Þäâ¸d7gÚ’Bm3N6¥¸â‹üöÿ #Q6¬SZ9äÄŽ®¸y5Ê2SÙ"†ÑÉ„UµAOUš4d E\2ñ·NƒôÐw±4b”<‘aÿŒ°Â8ñ¨‚69©fš·8Õ…›êt ˆ”¤îÅGFÒ‹5]†â%/ƒwšéwÑ×ÿx ZІËJ7‚AÕ]>bVe‘бlâxU)Ò„²4¾äÛL ìd¿¸ãžKÜZ¨·¯cÏ:å”ò-'ö”ÿR¼=!™Ð‘Œ¶á¨lHzdBåÐe6æ„e›Q¿¦¹ŒA¢`ý“åžOR’%9e¬ÉúîƒgCö<©‰>Û ªOÐ9 ¡Ê±QýƒÔÓ1žå¬hÅ\z2¥0•Aq*\ÿPô€¤ æ•X«Òñ¶{ìùˆG>P˜WÉ#óMBÄ1Št¨:ñ8êX¬j J–±(±¬ÆØÝÓø,c<‹Q?¢Æ©1.¿œÜÚ†Ž¶A ;tCC; øîò—g¨«IzªÔ3â«ê]Ê žRËÿä{åîŽþúÅ:EŽ7°ƒä0šÈ! yl5ÿ­á„<Þð0ÕPEªÊUª"‰’i©-å×Á ñ vC?ŠÉLÆ—œÅÑg#Ïh“_\f ž¹,.+ƒÏv&‘ãüìd™¹e„R³ Vôæ;ôHN%)Á4HÜ¥i”GéšB_1SkÒ Mi@¢rd¨ :Úâñ¶nÆÜ\a<ö07¢M¡ !:ÓQî†|Gà'›=¢i•fÓf€OÆ)&™ÿ¼Z.¥‘‰«Ac)ÉŽº.µ¸~É „88ÒÈt'cáù™Y¬:ÊDi7e1Pe`—“Ü(Ê/lb”%À¥‚ Ñ j†r´â!ÅsÇæ×?NðO9úxÿƳÖõlJP!ºÑ>>e£ƒ¦sTcôqªQQb#±µò·2p•ˆ…!"¥ìA)†L5<£zà?–ö‘æ °€¤û‡ýÌÕ¾HB|V!ˆDþ4= $"›jU7Xa;”Cm§ ‡Ýb‘CX‰óùh[˜a¶•J7ܵeh°Ž‹±|Å`ÙHF ’é‹Zža:hdb0]”ä\¹Pd¤•‘ɾ¬Ëç¡ vR€`š€ /€9ØQÞn$ÉtJ2‡4ÄcG¥µIm #$²¡ÄL3Òx†y ‘.SKʪª;ªšU %ö@¬šÿVñɆKæÛ $äj†`fzïzÃ?<1Ÿ¿”Croøè \vëG~êÖÕ6ŠnœÂv€c¦V¶tÄB•Ne5Q0Ól4”QRc¼±œR‰ˆËÙ5³ÌåDzwÙ΢+§:D}ˆÁˆ8Öù¤$åZź©1 jØHŒJÌkƒþÜ3U+¢Å5Œ¤­Kùj!ôê^n rR>[»µ³Éþ €tQ˜ÀJñÔó Â>¢•!á‘*ÃO¾Ž¹Š1%±I G”aL¢4È0ä ÕìªW$ÑE b;™Èœ$‰¨ABëŠÚèÁóa&n3•Tpä|LÿÔ ò8ˆ/[c ›Ú¨6ã›Í©7ÎZˆ;w¤4,1¤ S˜jU±r”!' Pê‡çQÞFÊþ9¡«ùŸñ)ƒ’”)åœg9U©CCæý 1Lf2jâOêÉ ®„6ÎÕ¢•ØòŒl°)œ”H2Lnò=×d&*@ €rÄÂ¥€W3T׌ŸíV<Ý;VTÌ——¿p‡âÌÕöÀb¬ªzCóîø©tvÅ;9$‚ú@³ÍGL«Þ:9ìo£ê€©rŠb Íjml|3õ/ÊvER)Ö¢6+Á)äa­PQBn˜Un™ "ŽcsÝ–`!±?Bõ#Ý =Æ‚lã'Uÿò6Z$¨eVD4D¦F Þ€@”P šÐ e) 44V!E6a&×· 2{?‚{jBqÔ’J˜RKX%Q2%1 °R¼g]+’":árP34JrT” ™F)Öt3TÖ3ePTvWi8_aæóÑPÐ h%›''PQ÷ SB³DWU·3:Ó35S"[œ€!Ù` ´ ­ÀaM^q K'ð·vóT_#=ÿ`bX"œ`wᢠÙÐOåâÁŠ™öOwá8²HeeÐ r#4UP‰w2V¦x%Ã4ÄtdÛ0óÑUC6ZŽ/UF ÿ÷OÜa’ÐyY &_j6„QVqmñ+Ĥ{j×ð â0 µ§&¶'.jaPrUˆRDq:1YxhŒÆ ÞÐ?ùõ(@E!à`$¶E,yAVÄyeÿyî`,b Õnia£å –fíÆ'¾b~|2dÕ%!\ÌöŠ(Ý`Õs$Ë@.¢A$Ùp‘’ÿ|*‘|GRŠq $¨6RòWä‚“æPw«xØ”¾b쑆ŽÓ iH ™æP4“oD ôEÿ Cõ•êÒ ``W÷VZǶjI„‘ëæ•Æ’!–ÐsµHILU!TÔFÿOb Ç&÷ƒÁ +ÓârE©4Jˆ„E¿µI‘ÿ)µ") ( ÀhES6Ü¡_5¨°"”š'IISefÖ~@g›!'« àÀÁå0hJwE¾r#Æœô`'#CaÓéåUQ ëàHã! â!Æo âH-s '“ Xëâ#ÔiÞñc‰gG·†´ø”š° m@ƒZfr0ºÁ$r £( ÿ¥]g2`LwEtwuÇöÌAzoú´i– L)–`wEQ©G ©çzÞ,Ò©¤&ÄPÛC%ÿq h‘ 3AÉgú û¢¹Sr5aÁ§…ˆF0ûÈpÕP RT 0¨!ÙJ‘ö@!郗 Ñb?³&æ° 34’!ÒÕ1ø ÛàWy[äÂ(jó(Ò“F5"Õ³?$º$Ò ¡/“æ<Û ’’“b€jÓ?79T‰¡ Gp¥¨Š”a¾xéIeÚ ƒ:ƒ1ˆ..˜ b¢±ú`iÓ?± ö‡)Ï’ åp•voú€©àkÐ `^) ìÖøR‘ w‘nCL`±†ÀR-ÿ`zt„C{†áƒGxÊu„Zb˜Õ’ Çð?ñQQ_ÿÛð{¢V'E…ú@­.r…::a,G0Â9ZÑy5¨9°*¥é‰jì•4ØQ•.s ÂtÄ"-yWo ~],¶…>CÉ0c“A’ô!‚!Ò°;oꈥ!UF"!£6ӈљ!~41S¦0ä )­a¡?æÛ•m€žb¸†ý¸Œ˜1YØQn¤± cÇ:š g9BtŠwE ¬÷ªå3›ÊVÙÀVÍQ ¢ŠáÁ J_UÓ`¡Š! ñpö©g  ,f±¡2Ž¿%q= ‘8­Õõ¿°"+r;Õjð{†/ÿ`µÓÃ=ÛÐ ‡. Gjš€‘]%BñP?ã BÕ‘®gqg²k´–?Çò$¾5i„—$¥‚Š×“ Be+Ü¢$Te‚ËÕ(1É’äò¦Õ3© Á%[Â#ADÒA¡a d<¢1 dEö ì°ðIg½BI‡@Sù(‚+ƒPé Šê‚Æ@æà,ÐÐ=¡a\C($eó?¨!±îPªjiª!¨$%ePn”ñ€ä–*ð[0Þ‘DDV9“"€„èÓ‚Ñg-¡\BVaò»# ’ä`3¡¶ ,Ú¶.ÁÚjÜZ;8([¦¨ÿü•y¦!+Ы›WPÑJ‘¡šÄÄ’0QpœõÑn¹ „g ÃÛ@gÿ4¬A±{$Êé0ˆ^>² ˜ê´œ°Q}ÏÀÄzÕ'ÏX'ë€&–X±°ª`âÐ …1VÑ 'Ûœ—žkÐy9 ,k›ºÆ—@¢]Ãé ò« Û Å# oÐ oF wpÄä†ÛÀzJ©ò¾¦!BâÐY£`‡äМbÙà0£1£Á$#†#°#Ž„Q‘ f¤qköÄ×‚Ž sS»q f FÙ]ÏÁ-Ò¶¹À¶ö@…ÐJõÈr.¡q0[–[JBpñ£j§"ÿ>"`!EÖ k„„{9„ùSqísZÙPŠÉW”¿ãÄ#<ã\èAD‚“ücºv>AUël7jk¸õ@éÖ‹jŒ²¹°ªw} Y¥±±jƒƒ›¸¤ÖÓ[p 4½éÂTÞÑ&SBEá²Ãî ™î èecxàÇ-ˆ¾áèHYn v6Ü&|#« $¨†M×.g .äàÍéÀÒa˜RŽÒìzƒ¡&g˜U»°û'¥À΄…ÇC¢.õLË6ñ ¹üÌص“Y™32 ÙC1ÊñH9À%û48S^€²7«© !3¡É@o1Ê,ÿ?ƒÛð6E“¸€¾¤9D¬ñ0ŒÔˆHBtPöHâj1§ÑzWŠ+¬$d8 ¶ ’¤&-õÄ Ëˆ1T¤žYæ•“sCTÙË@ ÷Á ú3œÓ!¢HåHe“ÍËB,âW`Щÿ­@k5÷vÕ q/CNò b®\¢·°)VRñL¢¤È?s_ 9Ðï‚0xhå0Ëï¯R61™Ã·×# u`éÚÙ‹½h2FFvÂI†Tòà¹ÞsêŒ>݈‹ßø¯’n5?3ç.`&I›7byÿЙ žóµ — PöÜ1ìÈÏd¢`•†‹qÄÓÑÔ« ×02qÒîSRʳÈü”` Œž Ä@¹°Äs¸!Ѝ¶€†EwÅ@ÉazáÑcf¿ ÊÛ4mËÑÒ6JÝÊH+ca9JÒÈÐ"ÉL®Š`0Z¤'‰Ü:yä A[72ÿÙ¶‘ÏPŽDMS·‘¡I{™m™v¬¶q*WŠÓV7Þ(@€(e7ÀS¨Q¥N¥Z•ª>X­Z]Zɲ•ÛÖM“;hÝÚØ{Ié_Ûi!½5ø/¡ÛL­Ø}̶-îÈÉΖì¯á“mC‹K3.ÊÙº±+G®Ûjš¤Í„–LS³¾š¼ t›Œ¡¹‘”¼™N˜ ¥ÎÉ$u&–¬¶BƒÝIÒM©œ&}ÉÌF–æw[¶lÿŽg³'­p¹dÏNBC™ºÌd)-£”¬LvÁµ%Ã#éïRÿÄõTnýq2}Ô™§[Wª\·rxºB8šš$jÚ@¨N¶É¤›ÿâÊd1ʱĠr8éF wÚ²‡ <ȆŒVÈø‡C×8ÅCv¶!çŸâ ‰Ï%{RkÑ%´6Ck›Qô±#›Rì)‹}Jé {rÀ€E¨+ À(¥øg+(£´ê¨|ÊJ)¡Z* ²¡©/G)gi~ G;z ‘ˆž…(騔‹À°£uÊ )›käF:ë:+ì™g`r©¤‘ØÑŒv8£g”lÄ\g9‘&j¶ƒd$—’&¡Gì"g»6¹Û¦ î6]F’쌑äí""i a'¢èÑd$z0¥¥mâ©.ž‘²ÑS:r\›î5“@¯»dÆ#fÕPÈQ…ÿUÖáDVÈa¥Äg„…æhô”F’];cç™/5k#³uÖùˆ!‡²„ÁnÎð 3º‰ä¡ˆÊ`§NfØè¢ŠÈ  8éyÄ2Ü…FX/Œi%±4«É9vJ4ÂmÞÈiKhaR %H€-7@€°'K˜£|Y+*kÎR«&·ìë8s²¡¦w$ƒ„­ºîú'“SÀfÿ£é½Êiϰ‡Ã40ÀfÒä½Ç¶Þækå>2gÇj4©´MÀÍFqF‰š2£„š™"ªÛØî(o5ƒÌ¹ËHÒÇ·Òº¡ú«¯Iî8i”É<·)çᓌé˜[;Ó»YÁôNOÿrFù'v2Q®V”ƒ¬/«ËF¤Ešq:šbÓL…¼ ‰Ä5(á“kÄ`Ó4¾*"¬Û¯rØËc•,hÏ@ÃJ0`ˆ;~'v<¢z|¡¤ì@I‰Áº¹•oÚ@íÚ±ä@"l¹²\>e—O¡ßSˆ¥¾†X¯-ó ,CoìȘ™Af‡¢šd¨FÄ̈\îbG\×µÈǤ%•Œb ĉ”è5°žõ¨±§Ö>SÙ^â¶Q0&×X‡Û lšãËW½ËàF˜Jf8iqKZ¬™éæ€ýš2}$HH!ió¦㘓€óªóZIhœ‡y3¦˜ªL;ÿóh1ØÃ7’pGB(¡±Ù£P2&Èq†H(ÿ°ôô«Úc åÈ„=2aUfv£ÕMŸøB!©æ™qIÏâ#V`µ°Á(@RÞ €¸z%®O‘ßSŽŠXڽĊW¼BJHcšÁf†nÏd°<‘«¸]Õã¦&‚;ŠuØA¯†%BÚKÒ6Ôç…ž°C…¯÷µ‚)]ðê—Zü²ŽC¹Ê‰µŠˆÁB'æ‚nB“Ö‚ë&Ea*Q+G_ê¸ õ¾"Ùdvâ³$cAZ eG²Jë|„¡¯ëSIÔ¶'7?Ã$ã`i¯YÄPRœ×,ÿ[ } ’(š.‰rDëÕ¬9ȲÑ’òÁˆ‚®fVY rp‚®p–tKdx~PéðÊž²%`N[îy]J–;CoXi¨ÁÄ]KÌ Ü‘õÌ‘‰êÙ£zéPÎÏÂ&:6¿eŠ!ç?ª‡dNœÂIX‚‰Ê’ -3-gùÛ«)áŽDÒ ±Çîì¢5ÏÅhF{ìG—ÌÄÅpÿÔ¢yVûX1” !ÖÚœ·,ck[þfT×çB'Ç:ÆAŽL­óÍXg3úl%ôqŒrä¹ÌÉÿ?¾ì}¹è£-ñQ½˜2Ñër¬Á¾{(JçŽn$ó€9’øFo¢:ÿ‹Ê«Ë‘rhõAŠöyd“«e€ à¨(œ™; Œ™¥xÊ ‘±ð¶1‰Ð2È2…0mxvp—r ‡a…EÙ®Cù —À,ϲÏÊ–°°³€¾8ßÑš¡Ëˆs¢p"H€ ƒi¸4a’yX/6‘ˆ¸Šƒ°SšœÌ’NûšRȆ2€IØ-’cMyÚ!>L飄°˜ÉK«tȨG‰>J‘Ð9ò2ŽŠˆ‚‡«Â5éòí`×z.ê*‡: ‡Us›6ø r°­:B¯!Ð:²£ûºÊV …x(Š¥@;µÛ°µãÿ° œŠ\È@XÌbbXs¨ž€À“†‡PXUH‡` qx5wÙv(‘ô° $‹¼ëxŒôœÔa…rؼ%X@ø¡ž=´0 õ+ƒÐ‡Ô‹›Ù#1P³Âq Ny=ﻋգ{ †ßèFM +Ѹ)+‹¯!‡4; uÜs` Âp cÐ§Ôø‹ÒpŒrAŽE›)ËÚ>c)r„vœ$² ˆÀHxl&z$(ù‹L01©Ç—hoèj¸±Œ70žŸ˜ì‘m¶S„Ø…’õq+L6„Šf‹¨ +V„¶XLJ˜Y øƒž K7K‰ÿXˆ[H‡=؆hºZ‡£s7IáºMá;’%Và„ c´›À ÍB {0y0rYˆ€ 8Ä)ì9'œB&$DDÉBë²-Öz u±®:P e@Æõú”×h‰ƒŒ2( ?I ”ÈË´,×/×8‡.JFÃë †€ÂBÔô­¢¸Xq"™X‰C3‹mà9­3ˆmˆ©¡Ôz†þCJÎ5€“BR,Š£ ™ Ü`;èÀ¨Ž ‰Éé“ÈkÙ Gß?r(ƒwt‡Ÿê)³©2ƒ$2‹nàƒˆÃM¡†7à§L  i°1c2Ø…2x*F¨žT@û\@ú‰@¯¯0ʹª+¨x6öñ° ´N4mE¯X rh…uÀ©iXr€‡tq­—¨¤­Q £´¢£°ERB“Á0¨xN¯x˜/1 RÒ € ‰k ¼l“3Aˆ+ô-CLÄ…x/xÚIhíÈŒ#e-yÿ°Ì)Ë*–רÌÍ•d€Äñc±©Âp¨‡Ü!”¸Aº¹5QÕ”B5aMY¯cuJ)8Hݬ½ƒ„Q±7×XÍeè¢äĤ ›£°°¥ ™S€8T¯ð€è\Eu…;ê¼ KSxerå<x`‡Sh뙼™Ë NðQ àC«ú‡68…ø‡Ü<Ÿ$  |À¸zËã †g@ Ñ£Q·€ L£‹«J a³ù™=R‘ÐXÙŒSÅ¡ݾ¹ ÄQBòGhH¨×ø ˜BQ“`(é@ paHŠ /Êy ŠüÆ<³"u…ò›J9YJ(ÿ›J¡Í„ Žƒ ×ºŽ•PÍQ%".ÀRzÍR÷Y’.JÛ-ñÒ0ýR¹²«2ۥ𰬘ÅxÍÛ+ñŠ-9’¥ÛAÁõ9±1вk“\Xƒ9áV [Nµ=Ô-™@ KWte Íê¸ëZRM]†JeK%j5˜Ñe‡ÑÕÍ„8¯„˜—±„RY/á'PQ>i¸†+¢q0ŠLØ ÖÎÙLL©›­\åÌå†Ú†:ÄÍÐT)j8'j†3ˆe ƒJ9•J!8„•lxÖ‡qC2ì“ÌA–‘q=Ôr=™ô]™ !Í>qÈm>‚ dÝ”ÝbUD:Ö콇0eðÕ2n›k^ä_‹Ü–yä\òŠpN;]Šßt¥ßV| >þcvÖyÝ’k„Ÿ$¹Ï5^À%1[ Ž\ V¶ ~ ‰];÷9’êér\{ƒ¢J=JÓ±ÃÒæðÞíåZ£®JüÐÄyÙ>:SŒ@ó¦†úЙi‚)׈ ÓYòRL¡(ŽãëØHM{ PoXÕÜÊZë$2N¶ j¶qH—è‹£(’7Þ. Ê.ã¸ÿj¯Èc¨Ðã°‡3mg­¶ v½O¯ø€ymd·tdö•«H^Ws~ E=T";°º¾H 2yñGe¼eßý&ˆÐùkMøk,‰¾vipry(QÓ$–Ð][î cÙgÑ7Ìl–øËÒ9wé ä‹:실CP}Íf ÕXA2ˆlhlN!¶‡t¨í`Ü!¶a>—H˜‚yëÊ•ä´Fë·Kç`Újä–­èНXùÙ’‰ÅÏägêžnëþçü€ûtŸk ‚.hàó†â¿9 …è‰NïÀ~’Z…upo÷†·>¸SrX…¶!çCÑÿwYÕaŒ¾xÅš½U™ b}šŽø€ “ ¨¾°<—rbÏ›í)zò¹i^^9ˆµ l¡†7Zyà¡Ú®mmî"hHjymj·u[:nn;–«#YÓª†Š«ÎêäÎñ(a×¶{ΧP»³ždé„ß§ rØ%¯hd’9ŠB8…Щ m!h(þðX¢iemØÐ„o²h·Y…tpïXÆúÆ0Ÿ<‹FŽR€†;;æÈâ ðú 5ð•l[5Í>‚©Íè£šØ C©I¬ÐÞ†¤“^h0ÈÞ"õkh¸o¡Þƒuà!X¨íx8‡x°m v‘\tm™ n!ŸÎú½¼ÒÿqSÇ=‹§®î}¾n ®`ú9ÛLŠE¨JR¼ʆuè†?È»n(É×c­ñk· lxƒoys0«$‡G„7N£„G™<ê¨:wØW{xA©9 ä€©ÃÑ[­šgéÍXpôK+{ðàXLVЇꑇ½ø&ŒU N¨€uåéã#xc—ôx¸ô«ä!ÐDñȱסJ0•Û;®ñ§ÐãÀñSŸø(Áõt5røÙ°Þ’˜WC€§zûЉ³¤ ™£F!Çí]ôŠ6ö÷Æ.K‡«´…l؃0O×êTWÊ(ëy7—‡í³9L1£fqÃÍÎAtá#UeÿœXÚ†5`‡y™U ‡L`‡ Û¦yVi^tE޶Y‡:0óÚxš¯ôkÖ¡£0ø$x_Œ—Nt¶Ûu¦x»÷¥–q6©&JVïgév’uîA¨O˜²è ¢ƒvq˜!”’MÚÞøò÷^fÿòt…x‘õƒ²-ÙË㣪žÈ‰ì)âÎp}ø ŽØg¨9«¾€G©éÁzW‘Z¨&wá´àŒ„ëɆ mêH§y V{ml(Ås=Ô§Xx1Õû‡·q¨ø‰¿{ñ‡™bºxá.nô\¯¸Ï¥¸ÆÀ¡@5e¬ ±Ð\ß “êÿJ»8ÒRõüÐqªÒjݪt9¶iÚÖf%ieºEÌAQ";HÒÈä"É#˜?Ò#w-›W¾ÇÒM2%omAiòŸ4o¸“Qöè6Ã.@èíeÜ’Þ6ÉE´MD„¬J8.¦ÒsŘäŒ+Εã/;2{5ÖYk­Ø_|à5Ø23;ˆ®Ö19ä†å–Ò<"QpÒÈ4¦&rËÿôÉÛp Û–°IgE·Ù¡urXN‡g°3ƒS´0è "Ý@R¡`Ð#‰ëÔDß:61ÍÝÐ]N÷ÅDRôuZʨn™Úd‹u¡`— €Í^׋¸#\ùn°Á|.În}<òÉ3{ã\Ø¥‚fv½X¹%®SÎ*WÙ!ºÂÑ)\}ÐPS²ÜÒ$óÏ•Wæ›Ì1ìC‘7€{ó¾%æ@#°;[’¿À —3#j€‡c§  Å´ó0íd¢ôøG»üÃëÀ,öØÔËâûá'(o0GPXaØÂÀªBƒ`‹…€iáfê=¸@o.!° Óæò"§ÿ‰gséU°(£¼!±ˆ’Ì]ˆõ5%ꥂ8iTP8u/„ÕÍ"u›Hݪ#gØä|\ú"O$% I0ìM¹HÊÑ“7°#qz=,á–D<.!ÀH,— у\ë Ç½F!&ÎÝK‹=i꺤‰Õ-®„¯cQI`—L²’sYa’~'¬M+1ÿ(žC)ÊQ.†ypÞ\f€éÀcÍ ÊIÊ1¦QˆŽ8 Žýºq2òçÆúô&©öÃ:€3àÜ‘ Šð‡™œX'ôÁ‰rœáÓ´„>jЊ ݱ‡7o`IB#‡=Í(*Œ8Ô¡ý aZv°ÿ"<TÂé¥3×òLµ¢7—éÐ.;TR5 ˜ ‘”}(DÚµ¹‰C=å’I˜‚’/IãåàÒ"»$ zЋ¤+94~É>2°#"dÈR#’Æ·å€ ±D!ÈmDBo؆å$a(vdbk`‡$¶! ¢Õl‰*E6JAQȳŒdÌb9F! AŽB(ôh9ˆÀ.’= [’¼ö`†­‡ù‡ñ *×¹Z@\Õ\f–”ëc,ùR6N–c(Soü© {pògDoÇÐ1¡J”öœ=ÈhYÀéCjÔÀ DE}TÇuè†$ÆÙ 2¸cc™hÿ-QÓÓD‰£Tt-­s“6˜`¥°M9DØŠ8ÀA)äY ý k€v™Ý\<£éÎ%j …‹ÕèªÝíXkÞ\Ö"qpE6‘û’^.’T&ô˜&èÈ-±'ôˆÈH˰‘ûî6eh©Nõ+þR"# i©¹ÊAr¬¡¡ KÜ`V¥êÁ'¼z¯6@uE±=Š2¥H%¬Š$9J&IxÈ‚+wc,ãä ±ºv‘.\X0·r]cCzclK6šŒg$ÃÉÈÆ3ð–%g}Ý€ì#öH|–³tÃd+{Yf––ƒ×‰Žý¢ƒ[0ç¦>¥èÆÿ?¶ s ì ìßm\v›Rècå°Ã.XÜ …¦Ÿ€an h“…N¨ ìθю֚‹;y˜‘—%敉8²Ñ¾À¶¯sЀzåiSŒ€¶ ü”FnÀ_SG„òÐJ5BÙžèĨÔXðÆhçüô J¹WNLÕ(!ÎÆè§˜Øu(k]T¼ÄL‚×GU{4¶³­5hyíEXÌÜ/Ñ^\2r6${J(™ÝÏxò?è‰ÉR$˔Е)±e}ßÔy7¤ðnd‚:`–ßÀÆ jÔ«%œ0‡¯ 0Öþ <»(ƒ¬t³gós¹€ t ©uÿJ» rÚIôÕ\­í•³|YÎrë&[•´È„\_ñt2Ö±·÷j‰Àô°‡DV}9|ÑC¿”XGOf=F4² pÛ Ãs®š•‹´ZKËÈ} Á80ô)T¹x\!He*T­¨Ep‘nZÍI˜æÚ-;Ü“eʨñ.ÈÙè±Yþƒx6d QräU{Ä»˜2Ã.«F#™$ª‘‰áT‡"ÎyHOÖ]>I”/°ZÄS O5bB¡ašÎb(èFä%/¹´¾«#•ǽö¶R¤G“7–|¬\íÒÒ¨Û@ºQbø¤–†ª[ÝR/iDOË Ãk–œV~N[9rO°Ï(ØÿH*"œ¸QÒš4vH’}4f@íàBh´š\öœË±n/ÿùóÈx@” \4ðyȸ‰IWPq¸Cž9•ƒ>Ø›=H‡;ÈÏôUp@ñÅÄV°D¾X y™KÔ 4,ÃÜ—>5‰ÎŒ Ïx‹ ±\d\ÀžeØ…)A ŒÑŸ Î Kì_ï-Ì"Ò)ŸòV~Qƒ~A~a $%™&dZ`AФ@ƒ~AƒT˜ŠùÙ`¤úYRû©ÝÉuv5 –¡*FvÙ `T€z¤Å6ЇÜH_5HuìK3ÙÃRÄ¿ñ p”Áú æéMWdàY|ÅXâWÿˆÑ}HC6$èqœ z\l µž%®à¶ àˆ]Äà~"("£¯ˆ†KÈ&@,CœHCáÈ;€V¾å ›¼¢õÑÚ BCX¤ƒ8¤Ã@ô"0jà£l[ÌNe š¡±ûIaÐ^(F£4*ÆhÀE“Œ†#ŽÈÜ|üÎ?L¿xÏsÐÉqÅ(ðb:$D/¦C<£:fɘÏxËhP¢$®^ ^âÈÁÅeø£ râdŒâ4dA’¡ŽѸ+C¦¥ƒ.ÂÚÔ$4j DdCO€sôâðb<ÀB:¸£Hòâ5@!£°Å22ãY)‘û)Aÿ$M$V\dã„8¢æŒEY8Çýž÷ÄMRÝDC”K¦ŒE,ȃ8ÄC,ă;žÃH¦ƒTš—Ì€[MexK*a†W6O&Â…)½à\¸]Mž%Z]ŒÆh¸…[Ä‚C&¢sÞôµ K,GX¬C/ªT¦,ôå_žC<˜KHEe Á³ZÚ-fº\ÍdZF¦AŽ"N€NºŠ@)4JO,DüÃOeŸF¢&èå:2e<ìT†ä`fZ@ØаÞ\¸Éi"«lâÔCI¦oþ&oF]ÀEe6ÉÌ@¨G†YB¼½aW8!Xød:„;F§k£e†u½$µÿ¡°x"p†gdÚ'U#0ÍhH©B»¼Á?lH$8g„H¹ŒE/šÅ!JÊŠd!\T¤n&foŠ'‚g\U[å«doE6pBÕEH6Œ‚Zä©”bï(Q¤©ƒ‚g‚–èo.(Ê1M]M“ìÑØ‘J Ì@e$l®d]¨ÈîuùPnþè@£‰©xBæ°ìèŽ@Èh@$BUF“ü`\—Z®]Y)‘f©of×_DÍ ÕÅŽÈЬèŠÜÐŽ¥©°)–j)œþæLþŠ툡=ÍZ)'-†YÆ©Ÿ©>K·u¢]‚ÔAá©×l''‘èŸ>*‘’!a€ižŠ!ƒ¢¡¤Bª¦f鎪AO¢ö£v’£nª©j)dæB¤±a詾*¤îO3Vá¡(¬æêŸ¢h¦†ê*°nªñ€ñÈÞ¯+²šª³äBak²>«©Â˜³B+µnê›V+¶f«¶že@;mpb-1.5/doc/tri-rods-bands.gif0000644000175400001440000002351512315324631013150 00000000000000GIF89aÆòÿÿÿÿÌÌÿÌÿÿÿîîî,Æ@ÿºÜþ0ÊI«½8ëÍ»ÿ`(Ždiž(j¬á¾°k ‚i®kÅBרâµ+½£I6û}OŒPÜ”Cª:™^±àFrCƒþ@ß°z¬¶Æ8eÍò<‹Øí‹Ìí0ó&x[}%€‚G†d]8$„%‰‡{“ho–’yv—˜"D‡7‹NQ¨&¡:¥› •± ª ;¬X°´t®K§¹»6Á© Å9¾`Ã$•³²ϼdÊiwÓ'q ÛjÀ¨ß×1〟ٜè +,êNª®¶r£ôÖø~ú~š×ŸªQètNɶ2ÝÜ!R€#JœH±¢Å‹3j¼cÿ£Æp CŠŒñ†Ç“(Sª\‰òž–UÁŒxj¦Í›+™åÉ$Ο@ƒb, ´¨Ñ£A‰"]ÊÔ£É=:dháß?^:©„÷Až@­CN¹ËÂÙ:h ¼‚àVЦc#áÎé7—ÃU20 n"ë¦nØòüëZÃÔ2”fip-¯ 8FÇwáÈÞ¾‘è4ª­6Ì'*·aìY0áÆˆ-}¹[úèoc±¥õ: éÖ©NðÒ·ït`}þ  6˜ÛÄEŠ-¹sÆQàð«[kô f Gþü2As¸Þ}ymVÊ;8_„{òï‡ìô¨®Þü$ú„·f¿Ã=:øÿ¥ñWAjõ‡~tù‹€9ø‡€‡›^Ä1XËoúé¢CŽÐ¡5FØœˆAA™r$æÇÜdqø¡ÙÁXÁ‹½¥†…݉š16ž_eíÃDiä‘H&©ä’L6éä“PF)e”Liå•Xf©å’4hY%—[†)æ˜d:©àA`„©J™pÆ)'‘_Îiçx*é?äéçŸF¾¹åš.èˇ~y WBàÇl=…Ôˆ¢=bP neb/@B~÷ÚTF¼ø„›q+Ê"#i©Zy@ÌÖ@ ¡ºA‹ ¼cC3fóè4âØZdþ´Úhÿ¸ª“è«mð:Z}º8±[ab«¥‚IY§„ºô^µÓðºGíUZ¹‡mÛÄl*Aé_ì. +êk/³˜š…¾$Ì+–dùVpOÄÌ«Þu5¸ ð®Ø¹Hjƒ€Vl±•m6YçÅwlåÆqfìñÈ[ ììPB É,ã)ò” ·,óÈ1ßùòÌ8Ù¢¿"óÏ`ZfÍ@='Ñ~Þl4ÇÃHFËÖLõš7*$2Dä2iÁ EÆÉÈ>VÒªÀFî…kM—ÜA&K8JÚ}’‰)xb(Û¸J¨²•‘„¥,gIËK.®–ÿjˆœñÊP²à–¸ÌB/ƒIÌb“Ã<&.”¥Ìf&ç•ã Â$›ÅÇ],Ï-”X)=%D8dñš}é ~¶ù€dªÑöÈf…ÀXTþEDxœhp˜˜S;æ@eðABp‚(v’¥Ú)ž}Òa‘NÌÆd ¡N%”’þl¡ ©¹ÿ¯~°ÓUÈ^¶×ÅîÝÆœ‹*BC×(¢ÁdJ¤¸zV âÑ%šx„$Q@T€–ÑŒ'Æ/pR>¸3 Tiš˜hŠ+yF¨iØ4 o…«PNê>…¼Lª‡a´ S˜žŽ°wMaÉS&ˆŒ5¬9A«Z׊¥°­>ÁIG’V¹¾À)áÀYßÊW·òõ¯€=‰_Ö¹âÕ°f½+]·wËâ³Gg*˜MYÉx)µv¹I£’EÑäÜ“U5ƒT¥:P¯.L¡¡uWÁ¸©ÖF*-íecµ)¤ÖV´Q Ohå›k:L·©‚âо¢r5:Õl'ÚÒwÿÔv·©L‹Ն3¹¡lÛH é–pyV‰í#YÑ$ï´ ä~ZEòBŒXäPWñ@ȽǦ»:0->«MZœf»cñ.«L›výÖdo XKà覷ºô$Ñ(†ùª)W °¼ ÏãÀ@uã…Ü CÃõ˜¬ù{„ÙŽ 6$ÆÍìøòKSýŠ{ׯ{YÌ‹€¼xäÅo$ÛÌTšŽsŸ;rÅ"§1$¡NÉ3cF‘u™—\•]§4ÍhÓß긇ͅŽ{y¯e¹©NÕ*3ƒbDZv‰°;ô‹ÉCˆä7t–PiWÊ+ŠWø² ±)¯ÿÎÀ s~KCŸJ3ï¥(Þ h›ØƒÛ%¡Ýl_‰ ðÓós¨G½@R›úÔL`õóÅ/}ª(ß PMkò½ºÖûÛ]‰hj­9 î½n»ÄãÆjË%Jv‚þ g Òö…Pq)­håfú8¡„tWVÜmç9Ú•~¡ \ìgº×F†²ÝŽ:uÏ-ÉIb2“Ý=¶MëR¨+£wÖ¤o}“¬ßRz²¿ÏFè]ºœ­¯,n1' à ¿įäðˆëL×íÅáTq(M|ã~úø @î$Gä”ÈQ~´ŸuÜt&g¹“^¦•ËN6/“È gñ˜ßüt8ÿËùÏÅ$t¸ù[uõ5ôÉý-Ô =gEÍS×;†OÝbQ:–²~±«GÅĉñ/¤ ©pßʵµî®çÃ_Ûð‚`wÞƒ¨mööŽùįSƒ‚•e˜üXvðÝ) hµ[µ0UÂ3¾ë·9ä|"Ûrén>†=ý;± Gçð9•ã³o‡…–þô¢ÿ„æq‡çxÞF¯—ÃyT½[´Ã’Ÿ|#®Hݰ›rñ=1†Oü/oWìz®ý…£H»ØKØŒêdï|É|W#ôÝq>îÕË©o_+îz7#µ!òÂ…ôY½KÅýæç^÷Á|ÕWÔÎ[5Óü_uoÿ†\Aÿ´#÷ø‡^ï'}°z@Ð~°€å¡€¬"zt„hK^3Í`ætH’Øèm.ö~"8‚$Ø+øKw§LDV‚”p‚^ƒnïG_² ƒÇD*iâ‚÷ƒ:؃>ÈG+øƒB8„žñ +pkôÓ@¸¶„LX?JÈj1ЄR8…T(@ô?OjYhknggu÷g&K’‚°¡HÎ7RµYsùBvo„hæU_{åÆPÌ…€ QJÍFf¦&å:ý× Ë5‡ûÁNaäenØ]f[u‡™E†û~|f;x˜aƒ Õ6G“`bø’ˆà‘øv-äz>ÿ…RÂá‰EP<$~+%x‹ñ;>â¨˜Š¨‘Úf‰”häBP¿—=´÷Š=6v³Š›GzÁ‘‰ß—‹„Xã†È7hæ_Œ†‰•ˆi`á}vHˆÌSÊaHÕhU‘wp&ƒ<èŒ(µv9òŒ“2R¥Ð\Û€ŒÞòRÙ€t÷4½â¸{’f#>¦·H LÅŒð‡ùhO’Ø[UÖ…x÷]×ÄÖÅ0~¦Ž¦±NÑXRº5wÙÄ€`¦NyÑ ˜Œ÷"‘…$’uV‘~Tf¢—<ä€vl˜,Y(+yg‡ÇTHE“N5’Ðzƒ¸OŠñyNDX@ {%V$aC©W#‘Xˆ52a”Mÿ)<1ZR I q”AÙVuµ•d¥XFY”JY%–7±”^™–o5Xi‰–céP—jIŸ¥•-!–q)sÉl¹—~ÙV)CYV4—D9Œ¶h˜va)—Y}ù˜’y‘9™@ɘ¡“ð{ivi™Q™ 9ša•Ð>¤¹Oñ™lŠdx¿xIÂ…[/ö‘*šy"Š—pŒ÷›r“–QˆÙ ˆç-¶#\úúBœæQ–Z¹…EÄÆH°™›:ö’ÿØg¸yv³˜¸›È9•¡0› ¨_S™’îÐK·IZþW)¦eØ‹køeÿ÷NŒd隨õˆ(Ylõ ÛvÔ)‘Iž?f0™* þyêHT—gžùàÙPáÕ ,2œÚè‹J‹&™Žµ’œ!¶lÙVe°h™º‰’‚Nú|ŠÐb¾¡Cc:¦‘¤XbÜõ£Ê‡S¡°‡Öøƒñ4P¢£T$":„zQ$›ýá›ÑypT 1ºDøPßÄŒ>)ŽŒg„.R…TØjâ#j÷kª¶…fú¦p§¸æ¦²&§¦ö¢VœÞÄz©Òzž5ApXGß8ÅqzÆÖ ZI3¤`…JŒ#ê5Z’ÖwI‡|pŒzªœíiƒ;Ñv6:ÿ©EaºSÊŠá(¢ ¿á¥üy©ó¸h`1©ãõAƒJV¤€!ºQËIª¦!‘šˆä£—÷‰ÖV©$BDjwhòQåØ=ˆ(‹Z~«º´c¤–Ô6F}Ûч›ê~pd­ð~ê¥+Òr.öÖ/À ­¹ù~Äš ˆz©Yqª¾†Y/ø¬ÚùZ'3\Goòæut2sýz'â©KW°4£°:7og£' «röv¥®±ÿf±.£5#°ëq aTPUM²÷Ð7{Òs+uM—²NFOU]f9(¦Ú©wIEaúª “×Uy›¡°ä$STE²mø…¸Â¤àö³òÿ*ȵ¬«axášO˜`M"I²Á´q– fg.úŠ¥Â*¡ö:J6µÔPjøÛBf› zº3U¥‰6­Æ9S›!"Î ‚¾Ú¡ÝH!o›˜Ò³!)Ø›…§µÎ åµCB® ®´ÊPgÄ/¼´®Þó­«ÊlvÛGjfljښ̰¬™¸I¹3KCÙAŽÎ¹¹Q®$Z¢» \;‰µ¤ë› çæ©X ÍlH,ef¢ìY¼º; @“Þ!œ÷p»à:m¹ëŠmôµíúšºèºñ FóAê Õ‰»¬Z«…±Ž †½šÈ/À»èGÎ Žbæ½z¸éô¾\ÿÚTƒ'·öèJ°ô»zDØþ wÞä§@½ ˲!C$hÇ$££ÀJ"r<tŒ$>WÁc¢6ÿŠÁ+'KrÒå˜ÀpWÂxò¯q@r«=ƒÂ& 30l'LÁ l.0â+cê®ë0ÃLBs5ŒÁA\$+¬n-ì/ Çà ‡Â‚"°C ÁO,4Kc©«q%ü8à°%ãÃ\C2EÜ8MS½©ÄL<6\L52óÅtÂK1¬ÆGÅ,+Ç?ütüå, Ç|Æ84z|5̰œ7|<4—s²,,¨$üsƒÜd…<&tü²;×È_çDýJÉ%÷È\6˜üoŠ ›¤ß‡Ä'¦Á×?x1²Xë4¾áÞáþá â">â$^â&~â(žâ*¾â,Þâ.þâ޵ïüƒ ­H5nãã:¾ã<Þã>~‹sãV4Ž.ŒKè"äräèPää¥8nÆä´Ä¾"å¶äpÄK•;ƒYNãVþã^þå`æb0]>æfîƒeî‚—}æÅDkàìÌæòæ2»¯æè»€}K£qÚ Ø«nݳîp³&}šÚñ¸y®Ü2¦¤Q­¬Ñ *šÝ‰“äM‘3­è—ž‡’z|Nÿ[ÎÒäÜ”è{Ý€Ä ³[†d¤‡Ô†TÚ¸ýx¿”>¾  tΫu˜}Îè çôÑ,è™Û3NÓè|ëöáêB½“›îÕ½Že@ ½MÑôÜëùdŸøž·Žwˆ¦˜¾p«F{ñï:ÿßòÄN4«Ž÷é½×ñ³,òÃ6¹;@ÿ ©ú±öŠŸïQà|ìŠòM«l"mö¥¡îäÛ~d‘Q’îºͬ OnoôÒ;!yÿìúù^¨Ú«5 QNÛìÚÆˆïõç˜ñ$êí=JÖå¹ÁþÒü›Ê‰Ÿæ/¸”ê¹õH䨯5yžîu¯tKËXîÁŒ?«fj¢†¦«Ì $´»¬ÿ)jú¦­ûÄX«+Ûõáö¦+óÓ5Sÿ%hÊa©¼À+ÐäŽg.OS`Ý;dZQë†0VõèÛ÷›÷%E]Ë„®€d{»SW_‹zþü0JP‡nÙ‰MºˆÿÊÿbGSýÚ‡¼Æý'šÐr„’ ËK$ă¢ÙÛ⌸[ýpž3•[Ž#ÊŠ*Öfî«”ô*ßúÎ÷Já †¡ñˆäµ–ÌæÒäŒ>KÒ*èT]A‡LUàRPÊ®b–L«ê6£èŽË}±c]|ïa¯¦>Ás…váG%b¸'µXñB²5Ærc3géÃv‰dÐéù *:JZjzŠšjÚ§ZÊŠú[ÒÚ9K{‹[;‘«Kq²›á)¬*ûÀ‹œœœ©iÄ© íj’jl›üŠ ,ÍÝípýÌš-nžÊÜ,ô|ž[~kÜž[ _oOßþþ®®.f›¶cЬÁèOU¾„ÿ âZèÐ^¼ƒáxUÈ£E²V!Œˆ¤È‘¡ ’4W‘–µX/b¤´2%('k–2i3§=œ:{Ò óÏË27÷èÔÏžÊx2}ÊÍ)Ôˆ,•¹ºƒ]MBS£výª¬ØqÔDùi˜ë ­6‹.íE`ªÔ±tG ðDïn]•g{¦Uû`9²«øk8±—F`R @ÅALx@¹âÌo8¶Ü'ófÏœ+L2š™EŒµl6iL &²àvݳ±†fð;IêÞ=ò<ž¤9’á4Vû D|MíÜ» ðnL&:iczdWöþ³ سfÞ\yòIÁϨÿ×.ĸ%ÛØ6Á:~úûÿ`€ý1!`ˆ`‚ .X@ T„>€` È B8Á†:èa€6h‚KÈ_ˆ¦(‹*FàŒ*¶£c—èGÖ}Ј>:ŸbW…'Ôíy É„GÆ^wCÓeá‚k2üˆe–Y\qò•Q‡0´fcA ‡Q•6¾7“5‰„fñ%˜_ìP'i×v'lr†&@¦ý9X,F¤5åœêL’gª¥ßž‰Å`¥{“­IÜ£4ºžy–VúšxŽ€çæ™*ˆª¨ º¡)`’z¹jî}ºÄ dªê)äÕ ÿØoKbõh¢ŠÖ™ëP­Bš*ij¹*c@”ùã¬ÒfhoÇJ ç`k›ØµC½šj¬IpšÞâô+”é¦ê-pÙÆÁ ™Âi²/œKZ»R½<è»/ª|–iíœàú{%kÛ KÕvP*Â#Œd‘XÅÍ,ñ"³bÜ+œQªqÇšhÜ¦Åšà ¨Á&§G.ºë¾Ì.F»r(ËQ/ͺÊ|ó;û¬ÖÐ4ÍÅËFóLt|¡ªÜ@É ,Ý4@T u>_ÝÇU2ª Rö5Â\ÃT\Õg§áuÙAü.mn'»¶H“WvÝCô<7ŽÝ½\ß5/ìRÎJ»,ÿ¸4£wâG4®#†oýŽoðmAÛŽ»«lÌ:@¾¹©¤!â‹ãÓw¤š'ø`x,\èð~í›|zŽ»y°zÙ·'ÇËÐ.ûÄ{‘rÞÓÙ—ù½ÛëkÖHpKvñó–f·ôf#Þ÷ÌrÊÀñÖ¿ þßÑ\~V¬Ý £´8~¾ŠMŽuÇéëðüœÚ{6¨çcR?ãñÉ ¿›ÍýÖRµ–|ª¦(ñÑÏHû3 ÷:¦ÀŒ©*xƒà.f³¸uë‚ÉÊ ÎÚ@~0MCñÞyHh¦ JL‚Åòßá2ñȰh0lLh¯rP5›«Û[¸C«õ01.ÿ$šg)Ó]∅Jâ%ž¨‚ü]B„j WÍt5*fˆiÀ¢óÆhE·™Qkè— {CÆC-Qf*ÑR¨еæu>‹££æ8†Õq…e»Ã7=Ó4æk~¼Á; Å7 rx‰ë‘"-8½Ð5Ñ‘ø‹ææƒ„«4ÒzÄ™ûäG¥âm’ÌáX$g9 ®r’„ŒÕÑ.1­‚üc^É`’¬—´¬Þ ¸Ÿ³i _0=©>æÕ‡wÏå2#sÍEb¤Uº„ U8ôuö‰eê°ÖÌlNL ;žØy*À3œæ Œîp#MD"¢ÐŒþ Ѐ t -¨ÿA_$#ÔD m¨C êOY󙨫ç01CLx¶¡”ѱ$w/Ê2£©ÛÐ&0€”ªt¥,m©K_ Ó˜Êt¦4­©MoZÓàt§<í©OÚ‚ à§)ÕiL@Ô¤*u©Lé,/'̵4uªT­ªU`Ô«ju«I@O³ÚR¤ru¬dª¦vdÒ駬lmkUÁêÖ¸ÊÕ«9u©XåŠ×¼¶œ»S‡ô ØÀº®‚-lU‡ S¸ÞÕ°Œë°wH<µ¬¤uyÃU|Wá2ÎÙéà±·è­’t)F;wû–KvÓ²]öâG ‰Mâˆh׺µùùyb|c´m}MïÚ¥–ÀõmíNÅêÕÙÒ¯|­ÜZw|•꾨Á/~b™ºãçUc'‚ò]?|•Úþù´Ÿ¾f©ïV·O·ùÅ~h£¿Rë{ßµâ¿þø¹Ú{Qûõüÿ•?KËÏ~̨ñ¿ªö›_NëÔ¿°îßëþ«?Vý÷8õrÝ7€sÅSów€¥€æ·€?uqG‡k0§~©ó€m%€/Õ€(WH˜€[WevtâI ÈUx|((n¥‚,xÁtO«·}eƒ7x!.‚ƒ;ȃ=胢ƒ?(„¢c{“Vº¡:,(Z·YIåJèXxõ‚˜~øxPèSw5YJõ„X¨U]¨TS¸€ªçx<ã…=TM†gHUkØUl~$8‡4%†7å†uÈ…u‡õ×J·†¹¡‡v¸Uy8ˆ(X}È~è±}Ç6‡SŠˆ‡È{†%‰ØÿW€”VdeˆšH€Œu‰Ï—‰ž(TlÕ‰¤XWŠÅ7Šš¸Š“ˆŠ–Õ~JØŠ‡øŠŸ‹œˆY·èzµX‡¼ˆ‹¹ˆ~í‡TÅŒ¬e0¶¸|Â…”¥…¥8†Éø‹€uŠÌ¨»˜†è‹XxŒ h…øZÝXYÛÈ‚âèßh´eŽŒEŽ ¸Ž;Uè~Ð÷íø€ïxŽò؆´‡z:ntÈý˜ú¨†»GÈc{’„(˜ðhûˆñ—;VH‚8€›Õ„µ‘fU|iY 9M ùÏ’ÁØ‘{ø‘ãgã—㘒Lqu’…(ùZ3©:I“Ô×’ÔW“ˆÿ“*ù|AÙ†ôò{õg”>Å“û{Dõ”E©|è6šg,»&aB×^£wy/c•<i…m`‡xЦ@\¹`Y7iL26¥—IþB•Mó•'eM¿22Dç––p-]©s¹MHégã—šÐsí¦tjdvyimƒ$Ø>Ú1/—8\s˜c§eÚôpwGuI3ƒù]7ój’)8uS™?÷=óEq)1žiuñ%š˜§fj©sà×v€é˜‡Dköšs#>¥ÉšµIm€¤¬Ù&óöyqp@ç/¨wzP;°Æ™öbœq‚KÉ)X„lµG_ù]"ô’,Շʉ•dI+äÿ‰¸.„)›}wž æD‡7¨4.¦g.7ŸCmÀžò¹1~fR¥žý™vAŸDô6i*y‘J¡ÚRi#Æ9z§ ‰¦? ÷ nôh'à’›{W^#¥žsЛˆ9kèfw3ðt<" zääy”¶s@—¢*º¡–=.*+æo™ùp&¶jùÉ?Vt?º ŸÐRiñr¡4Z¥3 šE–*GNÚ¥/#›Û;TªH™™^ò‚zY:?fz^ªl}4`©¤Jç¦>×4Y ·–kª8¸s§oÊHNs•}ª-üÒF* C'y<5?Ö:ƶ§Û6§ÓÿFAN¤¨‹ê$°©Ìô¨A©2ôT“ZKÚQ¢÷ù_³¢ÊOƒ .ÀñªL«žª2`]¶Ê`½Ô`¤ª¦‚",š©Ôªå«¹Šgž %œÊLÊŠp$Sli«³‰H†ê«© ›Á*¬ÉC¬Îº¬²Ú­Ù¦¬ÅZ$—Dé ½j  šGØš­ãªÚ­,Ö©Ù­ÍJ«à:«§òNzIœŠN=Ú¤îÊJ*”F䉮8“–²³ªª:H›ÿ§v? ÛE“dE¬™°BJ d±Mó±t/bG>î©›ëA!K9‚7g—ô¤ÑáuTÄ®€J°«NÒc¦_ú^%H¢Àvb3ÿ{C5«o,‹Št}vF‹é²HrM*›¨qW´:{´9jfúP0 õ!Cȵ]ëµ_ ¶a{ƒÀPå{˜äF'ŽON´l·?ª¶±&Ê´"å¶4ûyCâkµÖÉvwk?ɹ$beØǹx€;C‚›i¾T©µÓ^ÉšœŠk§ý™5º4·–¹çI¹pé¥P#F™Ë%<ÚŸÛ¦Nª2TT¸Žè Q㤦K7 º6û¸0¯¯+´%«¨©«»µkšòꥰ˘»Ûº›)ž}û¬Š*¼Š²¼L|ê»®«ÁÚ¼‹­2k#@Û´¹;´ÁZ$“°#´Õ{BÞ+ÿƒ®ŒÁ½ìd¾³ã½›Z&jʾñÛeöëdø+¹Ž‘¥Ð¾v«¿ùÀà,”Q |ô¿ãõ¾íÀ5ð>Š£ë)¹ ¼À‰×Àé•|Z¤Ú¶ìL¼Á†¡Á¼õ•€†f'Ü5j€Â*ÌÂl“Â. Ã1,cöeª-,ÃG°Â7ì 6œ9¼ /ÜÃ<üÃ:L§ OF¬NHœÄÌÄMìÄO ÅQ,ÅSLÅUlÅW ŨÄTj¬« =c¸5«Å½‘¶ñ e¨GØÄhÌl,´ôÔnì¥hõÄr Á[LK\‡Ovü£al¿|,Âx Installation Go to the next, previous, or main section.

Installation

In this section, we outline the procedure for installing the MIT Photonic-Bands package. Mainly, this consists of downloading and installing various prerequisites. As much as possible, we have attempted to take advantage of existing packages such as BLAS, LAPACK, FFTW, and GNU Guile, in order to make our code smaller, more robust, faster, and more flexible. Unfortunately, this may make the installation of MPB more complicated if you do not already have these packages.

You will also need an ANSI C compiler, of course (gcc is fine), and installation will be easiest on a UNIX-like system (Linux is fine). In the following list, some of the packages are dependent upon packages listed earlier, so you should install them in more-or-less the order given.

Note: Many of these libraries may be available in precompiled binary form, especially for GNU/Linux systems. Be aware, however, that library binary packages often come in two parts, library and library-dev, and both are required to compile programs using it.

Note: It is important that you use the same Fortran compiler to compile Fortran libraries (like LAPACK) and for configuring MPB. Different Fortran compilers often have incompatible linking schemes. (The Fortran compiler for MPB can be set via the F77 environment variable.)

Installation Paths

First, let's review some important information about installing software on Unix systems, especially in regards to installing software in non-standard locations. (None of these issues are specific to MPB, but they've caused a lot of confusion among our beloved users.)

Most of the software below, including MPB, installs under /usr/local by default; that is, libraries go in /usr/local/lib, programs in /usr/local/bin, etc. If you don't have root privileges on your machine, you may need to install somewhere else, e.g. under $HOME/install (the install/ subdirectory of your home directory). Most of the programs below use a GNU-style configure script, which means that all you would do to install there would be:

./configure --prefix=$HOME/install
when configuring the program; the directories $HOME/install/lib etc. are created automatically as needed.

Paths for Configuring

There are two further complications. First, if you install in a non-standard location (and /usr/local is considered non-standard by some proprietary compilers), you will need to tell the compilers where to find the libraries and header files that you dutifully installed. You do this by setting two environment variables:

setenv LDFLAGS "-L/usr/local/lib"
setenv CPPFLAGS "-I/usr/local/include"
Of course, substitute whatever installation directory you used. Do this before you run the configure scripts, etcetera. You may need to include multiple -L and -I flags (separated by spaces) if your machine has stuff installed in several non-standard locations. Bourne shell users (e.g. bash or ksh) should use the "export FOO=bar" syntax instead of csh's "setenv FOO bar", of course.

You might also need to update your PATH so that you can run the executables you installed (although /usr/local/bin is in the default PATH on many systems). e.g. if we installed in our home directory as described above, we would do:

setenv PATH "$HOME/install/bin:$PATH"

Paths for Running (Shared Libraries)

Second, many of the packages installed below (e.g. Guile) are installed as shared libraries. You need to make sure that your runtime linker knows where to find these shared libraries. The bad news is that every operating system does this in a slightly different way. The good news is that, when you run make install for the packages involving shared libraries, the output includes the necessary instructions specific to your system, so pay close attention! It will say something like "add LIBDIR to the foobar environment variable," where LIBDIR will be your library installation directory (e.g. /usr/local/lib) and foobar is some environment variable specific to your system (e.g. LD_LIBRARY_PATH on some systems, including Linux). For example, you might do:

setenv foobar "/usr/local/lib:$foobar"
Note that we just add to the library path variable, and don't replace it in case it contains stuff already. If you use Linux and have root privileges, you can instead simply run /sbin/ldconfig, first making sure that a line "/usr/local/lib" (or whatever) is in /etc/ld.so.conf.

If you don't want to type these commands every time you log in, you can put them in your ~/.cshrc file (or ~/.profile, or ~/.bash_profile, depending on your shell).

Fun with Fortran

MPB, and many of the libraries it calls, are written in C, but it also calls libraries such as BLAS and LAPACK (see below) that are usually compiled from Fortran. This can cause some added difficulty because of the various linking schemes used by Fortran compilers. MPB's configure script attempts to detect the Fortran linking scheme automatically, but in order for this to work you must use the same Fortran compiler and options with MPB as were used to compile BLAS/LAPACK.

By default, MPB looks for a vendor Fortran compiler first (f77, xlf, etcetera) and then looks for GNU g77. In order to manually specify a Fortran compiler foobar you would configure MPB with './configure F77=foobar ...'.

If, when you compiled BLAS/LAPACK, you used compiler options that alter the linking scheme (e.g. g77's -fcase-upper or -fno-underscoring), you will need to pass the same flags to MPB via './configure FFLAGS="...flags..." ...'.

One final note: you may run into trouble if you use a C compiler by a different vendor than your Fortran compiler, due to incompatible libraries. By default, MPB looks for a vendor C compiler (cc) first, but you can specify a different C compiler with './configure CC=foobar ...'.

BLAS

The first thing you must have on your system is a BLAS implementation. "BLAS" stands for "Basic Linear Algebra Subroutines," and is a standard interface for operations like matrix multiplication. It is designed as a building-block for other linear-algebra applications, and is used both directly by our code and in LAPACK (see below). By using it, we can take advantage of many highly-optimized implementations of these operations that have been written to the BLAS interface. (Note that you will need implementations of BLAS levels 1-3.)

You can find more BLAS information, as well as a basic implementation, on the BLAS Homepage. Once you get things working with the basic BLAS implementation, it might be a good idea to try and find a more optimized BLAS code for your hardware. Vendor-optimized BLAS implementations are available as part of the Compaq CXML, IBM ESSL, SGI sgimath, and other libraries. Recently, there has also been work on self-optimizing BLAS implementations that can achieve performance competitive with vendor-tuned codes; see the ATLAS homepage (and also PhiPACK). Links to more BLAS implementations can be found on SAL. I recommend ATLAS, but it does take some time to compile.

Note that the generic BLAS does not come with a Makefile; compile it with something like:

mkdir blas && cd blas # the BLAS archive does not create its own directory
get http://www.netlib.org/blas/blas.tgz
gunzip blas.tgz
tar xf blas.tar
f77 -c -O3 *.f   # compile all of the .f files to produce .o files
ar rv libblas.a *.o    #  combine the .o files into a library
su -c "cp libblas.a /usr/local/lib"   # switch to root and install

(Replace -O3 with your favorite optimization options. On Linux, I use g77 -O3 -fomit-frame-pointer -funroll-loops, with -malign-double -mcpu=i686 on a Pentium II.) Note that MPB looks for the standard BLAS library with -lblas, so the library file should be called libblas.a and reside in a standard directory like /usr/local/lib. (See also below for the --with-blas=lib option to MPB's configure script, to manually specify a library location.)

LAPACK

LAPACK, the Linear Algebra PACKage, is a standard collection of routines, built on BLAS, for more-complicated (dense) linear algebra operations like matrix inversion and diagonalization. You can download LAPACK from the LAPACK Home Page. More LAPACK links can be found on SAL.

Note that MPB looks for LAPACK by linking with -llapack. This means that the library must be called liblapack.a and be installed in a standard directory like /usr/local/lib (alternatively, you can specify another directory via the LDFLAGS environment variable as described earlier). (See also below for the --with-lapack=lib option to MPB's configure script, to manually specify a library location.)

MPI (optional)

Optionally, MPB is able to run on a distributed-memory parallel machine, and to do this we use the standard MPI message-passing interface. You can learn about MPI from the MPI Home Page. Most commercial supercomputers already have an MPI implementation installed; two free MPI implementations that you can install yourself are MPICH and LAM. MPI is not required to compile the ordinary, uniprocessor version of MPB.

In order for the MPI version of MPB to run successfully, we have a slightly nonstandard requirement: each process must be able to read from the disk. (This way, Guile can boot for each process and they can all read your control file in parallel.) Many (most?) commercial supercomputers, Linux Beowulf clusters, etcetera, satisfy this requirement.

Also, in order to get good performance, you'll need fast interconnect hardware such as Myrinet; 100Mbps Ethernet probably won't cut it. The speed bottleneck comes from the FFT, which requires most of the communications in MPB. FFTW's MPI transforms (see below) come with benchmark programs that will give you a good idea of whether you can get speedups on your system. Of course, even with slow communications, you can still benefit from the memory savings per CPU for large problems.

As described below, when you configure MPB with MPI support (--with-mpi), it installs itself as mpb-mpi. See also the user reference section for information on using MPB on parallel machines.

MPI support in MPB is thanks to generous support from Clarendon Photonics.

HDF5 (optional, strongly advised)

We require a portable, standard binary format for outputting the electromagnetic fields and similar volumetric data, and for this we use HDF. (If you don't have HDF5, you can still compile MPB, but you won't be able to output the fields or the dielectric function.)

HDF is a widely-used, free, portable library and file format for multi-dimensional scientific data, developed in the National Center for Supercomputing Applications (NCSA) at the University of Illinois (UIUC, home of the Fighting Illini and alma mater to many of this author's fine relatives).

There are two incompatible versions of HDF, HDF4 and HDF5 (no, not HDF1 and HDF2). We require the newer version, HDF5. Many visualization and data-analysis tools still use HDF4, but HDF5 includes an h5toh4 conversion program that you can use if you need HDF4 files.

HDF5 includes parallel I/O support under MPI, which can be enabled by configuring it with --enable-parallel. (You may also have to set the CC environment variable to mpicc. The resulting HDF5 library, however, may not work with the serial MPB.) This is not required to use the parallel version of MPB. MPB includes optional code to support this feature, and it may result in faster file I/O in the parallel MPB, but it is currently untested. (Let me know if you try it out; the worst that can happen is that MPB crashes or outputs garbage fields.)

You can get HDF and learn about it on the HDF Home Page. We have also collected some links to useful HDF software.

FFTW

FFTW is a self-optimizing, portable, high-performance FFT implementation, including both serial and parallel FFTs. You can download FFTW and find out more about it from the FFTW Home Page.

Important: the current release of MPB requires FFTW 2.x, and will not compile with FFTW 3.x.

If you want to use MPB on a parallel machine with MPI, you will also need to install the MPI FFTW libraries (this just means including --enable-mpi in the FFTW configure flags).

GNU Readline (optional)

GNU Readline is a library to provide command-line history, tab-completion, emacs keybindings, and other shell-like niceties to command-line programs. This is an optional package, but one that can be used by Guile (see below) if it is installed; we recommend getting it. You can download Readline from the GNU ftp site. (Readline is typically preinstalled on GNU/Linux systems).

GNU Guile

GNU Guile is an extension/scripting language implementation based on Scheme, and we use it to provide a rich, fully-programmable user interface with minimal effort. It's free, of course, and you can download it from the Guile Home Page. (Guile is typically included with GNU/Linux systems.)

Important: If you are using an RPM-based Linux system with Guile pre-installed, please note that you must also install the guile-devel RPM (which should be on your CD, but is not installed by default).

GNU Autoconf (optional)

If you want to be a developer of the MPB package (as opposed to merely a user), you will also need the GNU Autoconf program. Autoconf is a portability tool that generates configure scripts to automatically detect the capabilities of a system and configure a package accordingly. You can find out more at the Autoconf Home Page (autoconf is typically installed by default on Linux systems). In order to install Autoconf, you will also need the GNU m4 program if you do not already have it (see the GNU m4 Home Page).

libctl

Instead of using Guile directly, we separated much of the user interface code into a package called libctl, in the hope that this might be more generally useful. libctl automatically handles the communication between the program and Guile, converting complicated data structures and so on, to make it even easier to use Guile to control scientific applications. Download libctl from the libctl home site, unpack it, and run the usual configure, make, make install sequence. You'll also want to browse its manual, as this will give you a general overview of what the user interface will be like.

If you are not the system administrator of your machine, and/or want to install libctl somewhere else (like your home directory), you can do so with the standard --prefix=dir option to configure (the default prefix is /usr/local). In this case, however, you'll need to specify the location of the libctl shared files for the MPB package, using the --with-libctl=dir/share/libctl option to the MPB configure script.

MIT Photonic-Bands

Okay, if you've made it all the way here, you're ready to install the MPB package and start cranking out eigenmodes. (You can download the latest version and read this manual at the MIT Photonic-Bands Homepage.) Once you've unpacked it, just run:

./configure
make

to configure and compile the package (see below to install). Hopefully, the configure script will correctly detect the BLAS, FFTW, etcetera libraries that you've dutifully installed, as well as the C compiler and so on, and the make compilation will proceed without a hitch. If not, it's a Simple Matter of Programming to correct the problem. configure accepts several flags to help control its behavior. Some of these are standard, like --prefix=dir to specify and installation directory prefix, and some of them are specific to the MPB package (./configure --help for more info). The configure flags specific to MPB are:

--with-inv-symmetry
Assume inversion symmetry in the dielectric function, allowing us to use real fields (in Fourier space) instead of complex fields. This gives a factor of 2 benefit in speed and memory. In this case, the MPB program will be installed as mpbi instead of mpb, so that you can have versions both with and without inversion symmetry installed at the same time. To install both mpb and mpbi, you should do:
./configure
make
su -c "make install"
make distclean
./configure --with-inv-symmetry
make
su -c "make install"

--with-hermitian-eps
Support the use of complex-hermitian dielectric tensors (corresponding to magnetic materials, which break inversion symmetry).

--enable-single
Use single precision (C float) instead of the default double precision (C double) for computations. (Not recommended.)

--without-hdf5
Don't use the HDF5 library for field and dielectric function output. (In which case, no field output is possible.)

--with-mpi
Attempt to compile a parallel version of MPB using MPI; the resulting program will be installed as mpb-mpi. Requires MPI and MPI FFTW libraries to be installed, as described above.

Does not compile the serial MPB, or mpb-data; if you want those, you should make distclean and compile/install them separately.

--with-mpi can be used along with --with-inv-symmetry, in which case the program is installed as mpbi-mpi (try typing that five times quickly).

--with-libctl=dir
If libctl was installed in a nonstandard location (i.e. neither /usr nor /usr/local), you need to specify the location of the libctl directory, dir. This is either prefix/share/libctl, where prefix is the installation prefix of libctl, or the original libctl source code directory.

--with-blas=lib
The configure script automatically attempts to detect accelerated BLAS libraries, like DXML (DEC/Alpha), SCSL and SGIMATH (SGI/MIPS), ESSL (IBM/PowerPC), ATLAS, and PHiPACK. You can, however, force a specific library name to try via --with-blas=lib.

--with-lapack=lib
Cause the configure script to look for a LAPACK library called lib (the default is to use -llapack).

--disable-checks
Disable runtime checks. (Not recommended; the disabled checks shouldn't take up a significant amount of time anyway.)

--enable-prof
Compile for performance profiling.

--enable-debug
Compile for debugging, adding extra runtime checks and so on.

--enable-debug-malloc
Use special memory-allocation routines for extra debugging (to check for array overwrites, memory leaks, etcetera).

--with-efence
More debugging: use the Electric Fence library, if available, for extra runtime array bounds-checking.

You can further control configure by setting various environment variables, such as:

  • CC: the C compiler command
  • CFLAGS: the C compiler flags (defaults to -O3).
  • CPPFLAGS: -Idir flags to tell the C compiler additional places to look for header files.
  • LDFLAGS: -Ldir flags to tell the linker additional places to look for libraries.
  • LIBS: additional libraries to link against.

Once compiled, the main program (as opposed to various test programs) resides in the mpb-ctl/ subdirectory, and is called mpb. You can install this program under /usr/local (or elsewhere, if you used the --prefix flag for configure), by running:

su -c "make install"

The "su" command is to switch to root for installation into system directories. You can just do make install if you are installing into your home directory instead.

If you make a mistake (e.g. you forget to specify a needed -Ldir flag) or in general want to start over from a clean slate, you can restore MPB to a pristine state by running:

make distclean

Go to the next, previous, or main section. mpb-1.5/doc/tri-rods-eps-1.gif0000644000175400001440000000242412315324631013002 00000000000000GIF89a``öÿÿÿüüüûûûùùù÷÷÷öööôôôóóóñññîîîíííêêêéééèèèæææãããâââáááÝÝÝÜÜÜÛÛÛÙÙÙÕÕÕÔÔÔÓÓÓÐÐÐÍÍÍÌÌÌÉÉÉÆÆÆÅÅÅÀÀÀ¼¼¼ººº¹¹¹¸¸¸···´´´±±±°°°¯¯¯¨¨¨¦¦¦¡¡¡   ššš”””‹‹‹‰‰‰‡‡‡†††………zzzyyyqqqmmmlllfffeee]]]\\\SSSLLLEEEAAA???>>>===999777///***'''  ,``@ÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ  /:BEHILOQ­®¯®PML@4" — '09AK°ÇÈÉ­G9)º“ )1>IÊÛÜQI>1) Ñ’)9GÝî®KA90' ç” "4€0iÅÝ&I¢ãˆ À¯¢Å‹3jÜȱ£Ç CŠIˆWDÀÐÁD 6pä˜I³& (:L8@@ÉDÓd±®Ý»mÌœAû „ ,tYâä¨Õ!6>XX@r…6†X=êdÉ,.@@À@º¢cÿ“%‘œ¹¶…80¡ 4j ÎÆŒ&:`ˆ|ûðJžL¹²å˘3kÞ̹³çÏ#?)hA‚ R«^‚ƒ>pa‰Ø´ucRäG °lòW°aÅâ¾Júl²hQ `ô˜ZU9,æK ×:ÒfÍGšŒ`ûFïÛ&áÑB-Û‘N/´à¡ŠúdEnØ2É·ìÜ'W3tÙÕ€FÝWÖ=ÀðPDM† zñÌSÏ=þUv€ PÃE0áÎ71¬°ßè 8@A«ÅèHAQÚŽ<öèã@)äDiä‘H&©äÿ’L6éä“P`J ,àXf©%Ž<ùäãlµ}PB d–i¦7œg¢‘&Á!¤0B aÄxæ©';Ô B¯Å†YqÀŒÀ‚ 7ìà"vÓ„Eìà(ÙvDèv–=7ŠtÔ¡Ç©d„GŒ1ŽŠ¦Ý ¸ xÙ‘äitÓQåª+ª’d@Œð©·Âb%hà@[ ¼)ƒÁ"#„ H€¬ ` ; Ѭ+Láà &LЀºòj ‹6º-;¬9’”ìËn ˳ÑNË””€ƒöFQá #ˆK.S»`ƒÆ‹°:šÞ:W]åHqy‚ÊC=øècq«Ê-ì DS–°u«x™pàÂE(Ñ„;Ýú°Ã 2°0Ç^Æ¢¨PÃ@èiôF !3¤B´7–ÌÙ†p ‚™X§P ¨2zBš–d;°@cyåÚl·íöÛpÇ-÷Üt×Q ;mpb-1.5/doc/tri-rods-ez2.gif0000644000175400001440000002043712315325376012570 00000000000000GIF89aS`÷þþþþþ þ þþþþþþþþþþ þ""þ$$þ&&þ((þ**þ,,þ..þ00þ22þ44þ66þ88þ::þ<<þ>>þ@@þBBþDDþFFþHHþJJþLLþNNþPPþRRþTTþVVþXXþZZþ\\þ^^þ``þbbþddþffþhhþjjþllþnnþppþrrþttþvvþxxþzzþ||þ~~þ€€þ‚‚þ„„þ††þˆˆþŠŠþŒŒþŽŽþþ’’þ””þ––þ˜˜þššþœœþžžþ  þ¢¢þ¤¤þ¦¦þ¨¨þªªþ¬¬þ®®þ°°þ²²þ´´þ¶¶þ¸¸þººþ¼¼þ¾¾þÀÀþÂÂþÄÄþÆÆþÈÈþÊÊþÌÌþÎÎþÐÐþÒÒþÔÔþÖÖþØØþÚÚþÜÜþÞÞþààþââþääþææþèèþêêþììþîîþððþòòþôôþööþøøþúúþüüþþþþþüüþúúþøøþööþôôþòòþððþîîþììþêêþèèþææþääþââþààþÞÞþÜÜþÚÚþØØþÖÖþÔÔþÒÒþÐÐþÎÎþÌÌþÊÊþÈÈþÆÆþÄÄþÂÂþÀÀþ¾¾þ¼¼þººþ¸¸þ¶¶þ´´þ²²þ°°þ®®þ¬¬þªªþ¨¨þ¦¦þ¤¤þ¢¢þ  þžžþœœþššþ˜˜þ––þ””þ’’þþŽŽþŒŒþŠŠþˆˆþ††þ„„þ‚‚þ€€þ~~þ||þzzþxxþvvþttþrrþppþnnþllþjjþhhþffþddþbbþ``þ^^þ\\þZZþXXþVVþTTþRRþPPþNNþLLþJJþHHþFFþDDþBBþ@@þ>>þ<<þ::þ88þ66þ44þ22þ00þ..þ,,þ**þ((þ&&þ$$þ""þ þþþþþþþþþþ þ þþþþþ,S`@ÿÿ9i²$É‘"Bþ)\Èp¡®[µfɂ劕*T¦Fê¤É’$GŠ âƒgΛ5gÆ€é¢åJ•)QžT‚ÄÈ s*Äe‹ÖÄW~BÔhR¦P©fõB&9uíܵ[‡®\¸nÙ¬I{¶ Y±aÀ|ñÒ…«–¬W«LÚDéQ"‘~øì™ËÇ A‡Eºäɬ\Äže ‡Ž;wìÒ™çmÛµiÐ9¢”éS)U°jéúEìØ²fÏ ‰~ÖlY2c`{é²5 V«U©Pú7ªS%FƒôÈasÆÌ™nâÔÉãGP^I—:BåŠV._ÂŒ)cæL4´gΘ);F,˜¯] -ÿ’„É)U¯œóòõëû-Y­Pò”©í"C‚úà¡sÒL.WHÑDñƒ@ qQ\ÑÅiÀaƒ$‰%œˆÂÜ,·ìžX¸ÐòJ*¤|ÒQ$Œ 2Ä bˆ"ŽHòÏ%–LÒˆ!}б†þSS@áÄH„;àPƒ 0¸Ð“.¼  8ð„K4È…h´!Ç|RH"@BÉŒm!Èm”áEWøÓL$ñG ‚äÈ}äQkñ&t&aB$6Ìð )”BX0< Á  GD‘Eh¸1Ç{Ø…gž€ø±Ç»ÿÆU@Ñ„ q$9Ü@Ãk©œBJ(žlrÉ$,rˆ ~ø h”†[`aÅœN0¡„Aˆþ#DUQ"™ BË.½ü“KO³ÄòJEªœRŠ(Ÿp‚I%‘4‚!ìa‡n¨a†_p‘…THÑÌiÝý2O­Å'J'–DrŸ |ε}üá¢"T )¬ØÌ2Õ|cÎ:‡µ£Î9ã€Ã 6ÔDãÌvÅóK/»är -±¸Bâ'™H¢/!­ÊE×ÏA[„ *ÿ”ˆ $8ÖáFf˜ñOpÐG˜†,I%›„b +²ÜÂK0Å$³Œ3¡VšW:óRÖY­¨Ûl¡lÿ"I"k¡FohüóÆ©{üÁ¯uÄÁÛƒ:‘„‘þ „JùB 3ܰÃÅk®f¬‡‰ÅÈ#“ÌXñ"¹Å-ù˜°­¸ÞÔƒ¾2Y} .À ƒ 9ðÁЄ)`Á dHÃ`И@ØÀ(LE  r@„&\á f`ÃøôбU bO$¡ÃÕÄÐ… ©HºúÁý”$¬à$0P ` È@ÿVP ( \ ƒà0>¨a l‹þ€…È¢Õ(G<ò±|ü#áÐF5 Á º}çn¯`*JŠN`¢-Š0D úT9¼¡ lPƒŸÈµSõ i…/ wàcúø;ÆÁ kDcaÆ@„^,Q¶S4gÁ8F3¦q mtÃßðF7¶‘j@ãftFë| …ô°8…'*±VõÁw"Ä!ñÊXf²ÈÅ/бŒhX#Ü¥(¹¡kPCÎX!±ål¨C¾Æ0¶9Œ`ìì!­Q#)@A;d]ŒvøG¸0…% $CHÂ?¤D ñAˆYÙP§ÿº^Cà Æ0„–]”%­HóžET“ÀüÇ.ÆB‹Vb!ƒÐP2†/lÁ RxÂŽ@„]í@(å‚Pã!K¼C*¤OQ¤‹-` O(¤`\Ú€qáaDÒ¢†0d H‚xðüÀ@=ØAl@ƒ¸@((Bð|"(A \0áM Â÷Ê †ÃÝ„¸ŸÒ&.HA C€Þ?|pÕñ“H¬$ áF¼%?y  æ-€´P6B¶ZC”àp€B ˆ`EXÈŒÃGDB‰„$"ñˆFÿ(⃪‡†Žná T I4 ‡­+b©0…(<¡ |1·~Ѓæ7°a {„âÆ·ÚEüã¸PÆ6ÒA}ðãÿ0‡7°1 ®pªaš+VqŠQ|ÂXFKÒö°Ÿ8Ü»j8M7Wù‹`üú˜Å*B‰Zúᖸˋ1 L(禶èÅ0”ñ j`cŸ %7¶j´—ÉàA}Ñ _°ò¿ØE-,ʉôýcO}¸% QˆNd¢HÑ ü€…|¡ M8‚®„p„Pa \rèaˆ¢Tæ<éÁ/ ÌMax“ë’Å|O±ÜŽØ®€ÐƒBÄðÔ$,9ÿµRÈøØÐƒÐ«p)”]öÒt–´…/ŒÑ jlã0}9È!Žop#+í…Q…̓™Z`ÒËx†4ªakxßÏ$ÍÿvÀòŸÙ·øOxú K4¢ÑUÈò@B@ ¥ÈÉІ„IŒd4#ÔÐ}ßgb–· Ü1:Ó‡eÎÑ Á@ Æ€ ÉÈ` ÄP7•7ÊU/÷ ÿp`l@\RQ`@ÿ DoPzâ¡yú× ià À0 É€ Çððf¯ˆ0ûÄ ±P ¹°e±§S³€dÆ\Î¥"Aõ'kà&V°= LV@rBsÀPf' W†´€ ò ªÄ3! â´µsOùD6¡À´  Ù´± ¢Àn±_ÿbpG(DRRÒ2X¢9[ž³…TÆFñ gÿ# ¸àO Á ¤@1pBG":z‘£ð«¤À ” rðXÓQxFœf(ÂsX7ÀU4P‹6€; @ "!R¦á¡cS6 h¥ð —Є°tðƒC+q0spTC…` ‘fs `€P09CðFpFP7±(÷(`eìh( -5àVXÒ Ò%¿¦A1×xÿuÐd R‰‡PÌ"]Žs,¤iQ°p±¸UŽrC#à@0°40QÐf‚‰Ã‡à“‰”…{Wp½UY—U'™u?7 Ÿà œ  ÷òqY’ÅQ•gIYž†?2Ð%ð D,°LàpðŒ œà   ¡ pé ° ˜P#ð\¹E”DS!¥-Gp\A³ ¨0,>dœ]»0gPH÷JÇt%÷a@ÿ~П  NAàðа ¨ñM?s¬ PeæÐw¯bk-c´)`ðõ@3föÕ\@'G}ÿ x`'xv€úˆOŽp  À º°ñ ø@ïäð Ú 7ÃÞaPf‘F©¹ÙýRžçI(¦b±× ³÷ ÁG³'»w'ƒ`’Aæ± ³° ð Ò Þ ¦gÌÝÐL¦Ô Êà&{† a @'”™W‚à`Æè'£ï± £  &¯òw ž|ðx!6•`:x † Ì ÓP Þç}&f3eTwª ·Ð£êWQ¥Ð “ •FŠy*aÂwh6prв’:QYr025MÒ â i³:dØ`fBÃFndËÒ'*”b°T°Tõñ¤9[R*ˆÖG¹iM09‰m„%-uL”}p„`ؘ[xgàH¦ÿ‡Òg:Ð(M¢j5ËŽ'€+à2pàF@Èó²oàU*€C!à‰ © )7ðG n’¾l0ù`z+k°M 8ˆ²¸$VÄ ¶&Ð5ÐEWœSnÂnÔV ° `0 ñ>ÐY0l°…Å¡K=ù“†@sYo ²ÂURèØYÔ  p@ ‘HP`®ÊˆIB/€ ðà'PF€j ˆ #›à Ÿ ™”ÿ ——™ “ Ñ9ªwiÓÒAr+|=9ðp* „™A1R .„ðÿ  ð½’ Vð#@2R ÿ€`Ð}à¡ À  Ñ ÿp Åf1¯±FËe,{t)ô,ÑB0\ p2ÀlÀÜhpˆ° ¬À Çð Ñð ÿ@ ÛYd°Ãepjà%E   ÃP âÀò ÿ@Û@ î•ÜyšÂBNož±Û8n°i›;ÌÃfl !ÿ°šðrÏà êòðÿà ŽtsÁq0À¨‹@ Ÿ ÐîpýÐÿ0ë@Þ ¦„buG{áÿ©½Z£±;]qoðr,uð5> ›°Ú õðÇÿPí`à°Ÿ¤ z¤ƒ@“° ¤à º` ÓðE<ñàê`W‘ Õ`3ÛsÜ<7;—€"¸õ|@žx°Ì©\a ˜ «` Âð Û ó@k¼’ç û¹ Žýh1Šy@]oðspÉ_IÈ!«pøÀ Ù „mØÒ ¥Ú)±_˜rnà ÍÐ Ì`þÙ¨x7,ŸÐ ÿP Ž`˜ªÃt_ Š^&e׉ží ³‰lƒ Ó۳ݢ‰\]X£ Ê­eÿ䀯` ÅÿPvwôe_œ,þ¸›hàVð4A@ÿð=åVg°Š!l ƒØÔ€ÅÐÝHPñN¨@S›×Ö²ÐOÀ ^PÈÈot‰ËÒ,sÐ5I2ä áOeth£#¨¥° ™Q„dxàbfó¥\ÌEeVöK¾¸Jâ$¢†g&p°BTcÐBQàN Ñ–³‹¼¶­ çP8Ýè²Òyè¼YcFŒ-W¦@i¢ä‘ >vÜ C þ%pp"XÐÜù—葤J—0¹|yÉ¥HŽÒ¨ÇN6hȀႅJ'KrªÔ¨PŸ8e²4éÑ¢›9éÀ‰;—K’Pò&9*ä2þ±x‘ÃÈ•4{e•êŸ*ÔªR¡:eŠ”(P4]¢ÿ‰¢¶oÛ¤)¦Kл&gÅrÅ*•©Q 8aªÍˆ­=uâì63L—-Y®X©BeÊ÷ïÿ´‘#ˆ’©[ÄœEƒö¯X0_»rÙ¢%ëU+U§H…ꔩR¤F!=îà 5Î # /¸Ð‹øp©Å>ãJáÏ¿HœºŽÞ`#3Ì(ƒ Ë05Ü ƒ JJÁ%™lÌy‡žxþ '›išIÆa~áe¾Y`Á¹O6¹DG$ðŽ9àhC 4D$Øa€éE—[h!.¿Q<ѤHÖº;è#Ž7Ò„C:îÐãB¹¡jȉGŸ~‚'q¸¹fšg–9†øv‘оÿUP!#%iB6£Ž9â€#Íe)¦Ç+}…TºÌd’$ìc<ðP5=ú„¯,ñäY|Yæ‚â¡gxÚI‡p¶ùfv¬2B[‚l%•R@ùò›ñUUñÈ£e_z‘ïÐVNeÔG ‘¶týä!E¡D“PP%a–¡fqÌIGtÎ)Gœo¶Á†šhœÉ´˜a‚ùÅ[]pIö•TFᤒG)$?üHƒæ?&ˆ–VÒŒÿDBa’J6 åWjáee¢±foÂGœpÀéFàj¤y¦XcˆÙä ²åŸScÿ?T„M¹åe]xéå_t©¥R4‰D‘AÚc>ÔäEÜÍä“RV‰å–^†IÆiªÁF›m¶Ñ&›kŠ>ÚXø¶Þe^~ù‡[^9¥“J)„ >Øîã–¯ÌR–X`åXX1å“ÊÙCº7þaÓM?1d˜e6…YðÆeœFši¨¡fšhžÁvÐB%NôXþq%•P0yÄ? „ƒ 9ìÈ£@ !ný`óäŸK"Iä;Ú0ã:.ºøç 6â¨ãMBÚ9”Ûc±e`ˆ9&™e0£Í`†2A%+éâa ú (<Á‰LbƒÈÐà›öájxÿòàE--JÖ,Dá$HXÂ?®à…2¬vàƒ áˆwÑm°¨E.zŒaÃCDXòj‹e•B^²’q¹;¸ [˜B’€%8á\CT¤@X@úCtÞ€‚4Á@ð€ð%H! _0ä8-"˜ð)RáŠYàb¾F0‚ñ1Ï T‹2©ž>Ü!j@„àƒüàI€Âº@5̰‰ÑÉÔP†/d¡ŠGø‡&}„"( Và‚Òð†:ÔÐ+÷;E+da ]ô¿ˆP-JwŠ.})C¸)£tØp†0l¡ OHÂÿâF"$Á TÐÎІ9èÁ@nà ]„â%Alt£bùn‚¡Žwüƒ!!‰¹ÕMƒü/p! Ó9 Lˆ Dð°“žˆ¡ Y Â–p” üÀ?Ð)`Á  „ÃÎ’-\A …èzÀôà•Å(ºÐÅêò1E*^a ^Ĺ@& ¡ˆHqÄ#å¬  À„½Xæ¤(í†p„%Ìr a8ƒŠ²P…(%%+ÙAnðUä€?‚¢JKª‚…У%:1 Uü£µ˜…+N:FâAO€b)ä¢Jɾzƒì °T<µð…ÿÆ©EHÊpPƒÈ 0€A fPðï¬Âä¿;ð!³ƒ%2ñPF“PD îpÆ1ü£AÚŠÕy™Ø€šål d@ƒìàC¸è²°Q®DL‰Á X°¤ *` dPü ›O(­ù°P)E/FدlƒÍÌ Là‰N”‚ •WÍj;mpb-1.5/ltmain.sh0000644000175400001440000105152212235234705010707 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 mpb-1.5/missing0000755000175400001440000001533112235234727010467 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: mpb-1.5/aclocal.m40000644000175400001440000012550112315337031010720 00000000000000# generated automatically by aclocal 1.14 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_blas.m4]) m4_include([m4/ax_lapack.m4]) m4_include([m4/ax_mpi.m4]) m4_include([m4/ax_openmp.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) mpb-1.5/src/0000755000175400001440000000000012315341510007720 500000000000000mpb-1.5/src/Makefile.am0000644000175400001440000000103412315326133011676 00000000000000SUBDIRS = util matrices matrixio maxwell lib_LTLIBRARIES = libmpb@MPB_SUFFIX@.la libmpb@MPB_SUFFIX@_la_SOURCES = libmpb@MPB_SUFFIX@_la_LIBADD = util/libutil.la matrices/libmatrices.la maxwell/libmaxwell.la libmpb@MPB_SUFFIX@_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ BUILT_SOURCES = mpb@MPB_SUFFIX@.h include_HEADERS = mpb@MPB_SUFFIX@.h pkginclude_HEADERS = matrices/eigensolver.h matrices/matrices.h \ matrices/scalar.h maxwell/maxwell.h mpb@MPB_SUFFIX@.h: mpbconf.h cp -f mpbconf.h $@ EXTRA_DIST = mpbconf.h.in mpb-1.5/src/mpbi_mpi.h0000644000175400001440000000056312315341123011611 00000000000000/* src/mpbconf.h. Generated from mpbconf.h.in by configure. */ #ifndef MPB_H #define MPB_H 1 /* #undef SCALAR_COMPLEX */ /* #undef SCALAR_LONG_DOUBLE_PREC */ /* #undef SCALAR_SINGLE_PREC */ /* #undef WITH_HERMITIAN_EPSILON */ #define MPB_REAL 1 /* avoid C++ conflict with MPB's "real" type */ #include "mpb/eigensolver.h" #include "mpb/maxwell.h" #endif /* MPB_H */ mpb-1.5/src/maxwell/0000755000175400001440000000000012315341510011371 500000000000000mpb-1.5/src/maxwell/maxwell_op.c0000644000175400001440000012204712315341423013635 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "imaxwell.h" #include /**************************************************************************/ /* assign a = v going from transverse to cartesian coordinates. Here, a = (a[0],a[1],a[2]) is in cartesian coordinates. (v[0],v[vstride]) is in the transverse basis of k.m and k.n. */ static void assign_t2c(scalar *a, const k_data k, const scalar *v, int vstride) { scalar v0 = v[0], v1 = v[vstride]; ASSIGN_SCALAR(a[0], SCALAR_RE(v0)*k.mx + SCALAR_RE(v1)*k.nx, SCALAR_IM(v0)*k.mx + SCALAR_IM(v1)*k.nx); ASSIGN_SCALAR(a[1], SCALAR_RE(v0)*k.my + SCALAR_RE(v1)*k.ny, SCALAR_IM(v0)*k.my + SCALAR_IM(v1)*k.ny); ASSIGN_SCALAR(a[2], SCALAR_RE(v0)*k.mz + SCALAR_RE(v1)*k.nz, SCALAR_IM(v0)*k.mz + SCALAR_IM(v1)*k.nz); } /* assign a = k x v (cross product), going from transverse to cartesian coordinates. Here, a = (a[0],a[1],a[2]) and k = (k.kx,k.ky,k.kz) are in cartesian coordinates. (v[0],v[vstride]) is in the transverse basis of k.m and k.n. */ static void assign_cross_t2c(scalar *a, const k_data k, const scalar *v, int vstride) { scalar v0 = v[0], v1 = v[vstride]; /* Note that k x m = |k| n, k x n = - |k| m. Therefore, k x v = k x (v0 m + v1 n) = (v0 n - v1 m) * |k|. */ ASSIGN_SCALAR(a[0], (SCALAR_RE(v0)*k.nx - SCALAR_RE(v1)*k.mx) * k.kmag, (SCALAR_IM(v0)*k.nx - SCALAR_IM(v1)*k.mx) * k.kmag); ASSIGN_SCALAR(a[1], (SCALAR_RE(v0)*k.ny - SCALAR_RE(v1)*k.my) * k.kmag, (SCALAR_IM(v0)*k.ny - SCALAR_IM(v1)*k.my) * k.kmag); ASSIGN_SCALAR(a[2], (SCALAR_RE(v0)*k.nz - SCALAR_RE(v1)*k.mz) * k.kmag, (SCALAR_IM(v0)*k.nz - SCALAR_IM(v1)*k.mz) * k.kmag); #ifdef DEBUG { real num; num = SCALAR_NORMSQR(a[0])+SCALAR_NORMSQR(a[1])+SCALAR_NORMSQR(a[2]); CHECK(!BADNUM(num), "yikes, crazy number!"); } #endif } /* assign v = scale * k x a (cross product), going from cartesian to transverse coordinates. Here, a = (a[0],a[1],a[2]) and k = (k.kx,k.ky,k.kz) are in cartesian coordinates. (v[0],v[vstride]) is in the transverse basis of k.m and k.n. */ static void assign_cross_c2t(scalar *v, int vstride, const k_data k, const scalar *a, real scale) { scalar a0 = a[0], a1 = a[1], a2 = a[2]; scalar at0, at1; /* First, compute at0 = a*m and at1 = a*n. (Components of a that are parallel to k are killed anyway by the cross product.) */ ASSIGN_SCALAR(at0, SCALAR_RE(a0)*k.mx + SCALAR_RE(a1)*k.my + SCALAR_RE(a2)*k.mz, SCALAR_IM(a0)*k.mx + SCALAR_IM(a1)*k.my + SCALAR_IM(a2)*k.mz); ASSIGN_SCALAR(at1, SCALAR_RE(a0)*k.nx + SCALAR_RE(a1)*k.ny + SCALAR_RE(a2)*k.nz, SCALAR_IM(a0)*k.nx + SCALAR_IM(a1)*k.ny + SCALAR_IM(a2)*k.nz); /* Now, k x a = k x (at0*m + at1*n) = (at0*n - at1*m) * |k|. */ scale *= k.kmag; /* combine scale factor and |k|*/ ASSIGN_SCALAR(v[0], - scale * SCALAR_RE(at1), - scale * SCALAR_IM(at1)); ASSIGN_SCALAR(v[vstride], scale * SCALAR_RE(at0), scale * SCALAR_IM(at0)); #ifdef DEBUG { real dummy = SCALAR_NORMSQR(v[0]) + SCALAR_NORMSQR(v[vstride]); CHECK(!BADNUM(dummy), "yikes, crazy number!"); } #endif } /* compute a = u x v, where a and u are in cartesian coordinates and v is in transverse coordinates. */ static void assign_ucross_t2c(scalar *a, const real u[3], const k_data k, const scalar *v, int vstride) { scalar v0 = v[0], v1 = v[vstride]; real vx_r, vy_r, vz_r; #ifdef SCALAR_COMPLEX real vx_i, vy_i, vz_i; #endif /* Note that v = (vx,vy,vz) = (v0 m + v1 n). */ vx_r = SCALAR_RE(v0)*k.mx + SCALAR_RE(v1)*k.nx; vy_r = SCALAR_RE(v0)*k.my + SCALAR_RE(v1)*k.ny; vz_r = SCALAR_RE(v0)*k.mz + SCALAR_RE(v1)*k.nz; #ifdef SCALAR_COMPLEX vx_i = SCALAR_IM(v0)*k.mx + SCALAR_IM(v1)*k.nx; vy_i = SCALAR_IM(v0)*k.my + SCALAR_IM(v1)*k.ny; vz_i = SCALAR_IM(v0)*k.mz + SCALAR_IM(v1)*k.nz; #endif ASSIGN_SCALAR(a[0], u[1] * vz_r - u[2] * vy_r, u[1] * vz_i - u[2] * vy_i); ASSIGN_SCALAR(a[1], u[2] * vx_r - u[0] * vz_r, u[2] * vx_i - u[0] * vz_i); ASSIGN_SCALAR(a[2], u[0] * vy_r - u[1] * vx_r, u[0] * vy_i - u[1] * vx_i); } /**************************************************************************/ void maxwell_compute_fft(int dir, maxwell_data *d, scalar *array_in, scalar *array_out, int howmany, int stride, int dist) { #if defined(HAVE_FFTW3) FFTW(plan) plan, iplan; FFTW(complex) *carray_in = (FFTW(complex) *) array_in; real *rarray_in = (real *) array_in; FFTW(complex) *carray_out = (FFTW(complex) *) array_out; real *rarray_out = (real *) array_out; int ip; for (ip = 0; ip < d->nplans && (howmany != d->plans_howmany[ip] || stride != d->plans_stride[ip] || dist != d->plans_dist[ip]); ++ip); if (ip < d->nplans) { plan = (FFTW(plan)) d->plans[ip]; iplan = (FFTW(plan)) d->iplans[ip]; } else { /* create new plans */ ptrdiff_t np[3]; int n[3]; np[0]=n[0]=d->nx; np[1]=n[1]=d->ny; np[2]=n[2]=d->nz; # ifdef SCALAR_COMPLEX # ifdef HAVE_MPI CHECK(stride==howmany && dist==1, "bug: unsupported stride/dist"); plan = FFTW(mpi_plan_many_dft)(3, np, howmany, FFTW_MPI_DEFAULT_BLOCK, FFTW_MPI_DEFAULT_BLOCK, carray_in, carray_out, MPI_COMM_WORLD, FFTW_BACKWARD, FFTW_ESTIMATE | FFTW_MPI_TRANSPOSED_IN); iplan = FFTW(mpi_plan_many_dft)(3, np, howmany, FFTW_MPI_DEFAULT_BLOCK, FFTW_MPI_DEFAULT_BLOCK, carray_in, carray_out, MPI_COMM_WORLD, FFTW_FORWARD, FFTW_ESTIMATE | FFTW_MPI_TRANSPOSED_OUT); # else /* !HAVE_MPI */ plan = FFTW(plan_many_dft)(3, n, howmany, carray_in, 0, stride, dist, carray_out, 0, stride, dist, FFTW_BACKWARD, FFTW_ESTIMATE); iplan = FFTW(plan_many_dft)(3, n, howmany, carray_in,0,stride, dist, carray_out, 0, stride, dist, FFTW_FORWARD, FFTW_ESTIMATE); # endif /* !HAVE_MPI */ # else /* !SCALAR_COMPLEX */ { int rnk = n[2] != 1 ? 3 : (n[1] != 1 ? 2 : 1); int nr[3]; nr[0] = n[0]; nr[1] = n[1]; nr[2] = n[2]; nr[rnk-1] = 2*(nr[rnk-1]/2 + 1); # ifdef HAVE_MPI CHECK(stride==howmany && dist==1, "bug: unsupported stride/dist"); plan = FFTW(mpi_plan_many_dft_c2r)(rnk, np, howmany, FFTW_MPI_DEFAULT_BLOCK, FFTW_MPI_DEFAULT_BLOCK, carray_in, rarray_out, MPI_COMM_WORLD, FFTW_ESTIMATE | FFTW_MPI_TRANSPOSED_IN); iplan = FFTW(mpi_plan_many_dft_r2c)(rnk, np, howmany, FFTW_MPI_DEFAULT_BLOCK, FFTW_MPI_DEFAULT_BLOCK, rarray_in, carray_out, MPI_COMM_WORLD, FFTW_ESTIMATE | FFTW_MPI_TRANSPOSED_OUT); # else /* !HAVE_MPI */ plan = FFTW(plan_many_dft_c2r)(rnk, n, howmany, carray_in, 0, stride, dist, rarray_out, nr, stride, dist, FFTW_ESTIMATE); iplan = FFTW(plan_many_dft_r2c)(rnk, n, howmany, rarray_in, nr, stride, dist, carray_out, 0, stride, dist, FFTW_ESTIMATE); # endif /* !HAVE_MPI */ } # endif /* !SCALAR_COMPLEX */ CHECK(plan && iplan, "Failure creating FFTW3 plans"); } /* note that the new-array execute functions should be safe since we only apply maxwell_compute_fft to fftw_malloc'ed data (so we don't ever have misaligned arrays), and we check above that the strides etc. match */ # ifdef SCALAR_COMPLEX # ifdef HAVE_MPI FFTW(mpi_execute_dft)(dir < 0 ? plan : iplan, carray_in, carray_out); # else /* !HAVE_MPI */ FFTW(execute_dft)(dir < 0 ? plan : iplan, carray_in, carray_out); # endif /* !HAVE_MPI */ # else # ifdef HAVE_MPI if (dir > 0) FFTW(mpi_execute_dft_r2c)(iplan, rarray_in, carray_out); else FFTW(mpi_execute_dft_c2r)(plan, carray_in, rarray_out); # else /* !HAVE_MPI */ if (dir > 0) FFTW(execute_dft_r2c)(iplan, rarray_in, carray_out); else FFTW(execute_dft_c2r)(plan, carray_in, rarray_out); # endif /* !HAVE_MPI */ # endif if (ip == MAX_NPLANS) { /* don't store too many plans */ FFTW(destroy_plan)(plan); FFTW(destroy_plan)(iplan); } else if (ip == d->nplans) { /* save for later re-use */ d->plans[ip] = plan; d->iplans[ip] = iplan; d->plans_howmany[ip] = howmany; d->plans_stride[ip] = stride; d->plans_dist[ip] = dist; d->nplans++; } #elif defined(HAVE_FFTW) CHECK(array_in == array_out, "only in-place supported with FFTW2"); # ifdef SCALAR_COMPLEX # ifndef HAVE_MPI fftwnd((fftplan) (dir < 0 ? d->plans[0] : d->iplans[0]), howmany, (fftw_complex *) array_in, stride, dist, 0, 0, 0); # else /* HAVE_MPI */ CHECK(stride == howmany && dist == 1, "weird strides and dists don't work with fftwnd_mpi"); fftwnd_mpi((fftplan) (dir < 0 ? d->plans[0] : d->iplans[0]), howmany, (fftw_complex *) array_in, (fftw_complex *) NULL, FFTW_TRANSPOSED_ORDER); # endif /* HAVE_MPI */ # else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI if (dir > 0) rfftwnd_real_to_complex((fftplan) (d->iplans[0]), howmany, (fftw_real *) array_in, stride, dist, 0, 0, 0); else rfftwnd_complex_to_real((fftplan) (d->plans[0]), howmany, (fftw_complex *) array_in, stride, dist, 0, 0, 0); # else /* HAVE_MPI */ CHECK(stride == howmany && dist == 1, "weird strides and dists don't work with rfftwnd_mpi"); rfftwnd_mpi((fftplan) (dir < 0 ? d->plans[0] : d->iplans[0]), howmany, array_in, (scalar *) NULL, FFTW_TRANSPOSED_ORDER); # endif /* HAVE_MPI */ # endif /* not SCALAR_COMPLEX */ #else /* not HAVE_FFTW */ # error only FFTW ffts are supported #endif /* not HAVE_FFTW */ } /**************************************************************************/ /* assigns newv = matrix * oldv. matrix is symmetric and so is stored in "packed" format. */ void assign_symmatrix_vector(scalar_complex *newv, const symmetric_matrix matrix, const scalar_complex *oldv) { scalar_complex v0 = oldv[0], v1 = oldv[1], v2 = oldv[2]; #if defined(WITH_HERMITIAN_EPSILON) newv[0].re = matrix.m00 * v0.re; newv[0].im = matrix.m00 * v0.im; CACCUMULATE_SUM_MULT(newv[0], matrix.m01, v1); CACCUMULATE_SUM_MULT(newv[0], matrix.m02, v2); newv[1].re = matrix.m11 * v1.re; newv[1].im = matrix.m11 * v1.im; CACCUMULATE_SUM_CONJ_MULT(newv[1], matrix.m01, v0); CACCUMULATE_SUM_MULT(newv[1], matrix.m12, v2); newv[2].re = matrix.m22 * v2.re; newv[2].im = matrix.m22 * v2.im; CACCUMULATE_SUM_CONJ_MULT(newv[2], matrix.m02, v0); CACCUMULATE_SUM_CONJ_MULT(newv[2], matrix.m12, v1); #else newv[0].re = matrix.m00 * v0.re + matrix.m01 * v1.re + matrix.m02 * v2.re; newv[0].im = matrix.m00 * v0.im + matrix.m01 * v1.im + matrix.m02 * v2.im; newv[1].re = matrix.m01 * v0.re + matrix.m11 * v1.re + matrix.m12 * v2.re; newv[1].im = matrix.m01 * v0.im + matrix.m11 * v1.im + matrix.m12 * v2.im; newv[2].re = matrix.m02 * v0.re + matrix.m12 * v1.re + matrix.m22 * v2.re; newv[2].im = matrix.m02 * v0.im + matrix.m12 * v1.im + matrix.m22 * v2.im; #endif #ifdef DEBUG { real dummy; dummy = CSCALAR_NORMSQR(newv[0]) + CSCALAR_NORMSQR(newv[1]) + CSCALAR_NORMSQR(newv[2]); CHECK(!BADNUM(dummy), "yikes, crazy number!"); } #endif } /* compute the D field in position space from Hin, which holds the H field in Fourier space, for the specified bands; this amounts to taking the curl and then Fourier transforming. The output array, dfield, is fft_output_size x cur_num_bands x 3, where fft_output_size is the local spatial indices and 3 is the field components. Note: actually, this computes just (k+G) x H, whereas the actual D field is i/omega i(k+G) x H...so, we are really computing -omega*D, here. */ void maxwell_compute_d_from_H(maxwell_data *d, evectmatrix Hin, scalar_complex *dfield, int cur_band_start, int cur_num_bands) { scalar *fft_data = (scalar *) dfield; scalar *fft_data_in = d->fft_data2 == d->fft_data ? fft_data : (fft_data == d->fft_data ? d->fft_data2 : d->fft_data); int i, j, b; CHECK(Hin.c == 2, "fields don't have 2 components!"); CHECK(d, "null maxwell data pointer!"); CHECK(dfield, "null field output data!"); CHECK(cur_band_start >= 0 && cur_band_start + cur_num_bands <= Hin.p, "invalid range of bands for computing fields"); /* first, compute fft_data = curl(Hin) (really (k+G) x H) : */ for (i = 0; i < d->other_dims; ++i) for (j = 0; j < d->last_dim; ++j) { int ij = i * d->last_dim + j; int ij2 = i * d->last_dim_size + j; k_data cur_k = d->k_plus_G[ij]; for (b = 0; b < cur_num_bands; ++b) assign_cross_t2c(&fft_data_in[3 * (ij2*cur_num_bands + b)], cur_k, &Hin.data[ij * 2 * Hin.p + b + cur_band_start], Hin.p); } /* now, convert to position space via FFT: */ maxwell_compute_fft(+1, d, fft_data_in, fft_data, cur_num_bands*3, cur_num_bands*3, 1); } /* Compute E (output in dfield) from D (input in dfield); this amounts to just dividing by the dielectric tensor. dfield is in position space and corresponds to the output from maxwell_compute_d_from_H, above. */ void maxwell_compute_e_from_d(maxwell_data *d, scalar_complex *dfield, int cur_num_bands) { int i, b; CHECK(d, "null maxwell data pointer!"); CHECK(dfield, "null field input/output data!"); for (i = 0; i < d->fft_output_size; ++i) { symmetric_matrix eps_inv = d->eps_inv[i]; for (b = 0; b < cur_num_bands; ++b) { int ib = 3 * (i * cur_num_bands + b); assign_symmatrix_vector(&dfield[ib], eps_inv, &dfield[ib]); } } } /* Compute the magnetic (H) field in Fourier space from the electric field (e) in position space; this amouns to Fourier transforming and then taking the curl. Also, multiply by scale. Other parameters are as in compute_d_from_H. Note: we actually compute (k+G) x E, whereas the actual H field is -i/omega i(k+G) x E...so, we are actually computing omega*H, here. */ void maxwell_compute_H_from_e(maxwell_data *d, evectmatrix Hout, scalar_complex *efield, int cur_band_start, int cur_num_bands, real scale) { scalar *fft_data = (scalar *) efield; scalar *fft_data_out = d->fft_data2 == d->fft_data ? fft_data : (fft_data == d->fft_data ? d->fft_data2 : d->fft_data); int i, j, b; CHECK(Hout.c == 2, "fields don't have 2 components!"); CHECK(d, "null maxwell data pointer!"); CHECK(efield, "null field output data!"); CHECK(cur_band_start >= 0 && cur_band_start + cur_num_bands <= Hout.p, "invalid range of bands for computing fields"); /* convert back to Fourier space */ maxwell_compute_fft(-1, d, fft_data, fft_data_out, cur_num_bands*3, cur_num_bands*3, 1); /* then, compute Hout = curl(fft_data) (* scale factor): */ for (i = 0; i < d->other_dims; ++i) for (j = 0; j < d->last_dim; ++j) { int ij = i * d->last_dim + j; int ij2 = i * d->last_dim_size + j; k_data cur_k = d->k_plus_G[ij]; for (b = 0; b < cur_num_bands; ++b) assign_cross_c2t(&Hout.data[ij * 2 * Hout.p + b + cur_band_start], Hout.p, cur_k, &fft_data_out[3 * (ij2*cur_num_bands+b)], scale); } } /* Compute H field in position space from Hin. Parameters and output formats are the same as for compute_d_from_H, above. */ void maxwell_compute_h_from_H(maxwell_data *d, evectmatrix Hin, scalar_complex *hfield, int cur_band_start, int cur_num_bands) { scalar *fft_data = (scalar *) hfield; scalar *fft_data_in = d->fft_data2 == d->fft_data ? fft_data : (fft_data == d->fft_data ? d->fft_data2 : d->fft_data); int i, j, b; CHECK(Hin.c == 2, "fields don't have 2 components!"); CHECK(d, "null maxwell data pointer!"); CHECK(hfield, "null field output data!"); CHECK(cur_band_start >= 0 && cur_band_start + cur_num_bands <= Hin.p, "invalid range of bands for computing fields"); /* first, compute fft_data = Hin, with the vector field converted from transverse to cartesian basis: */ for (i = 0; i < d->other_dims; ++i) for (j = 0; j < d->last_dim; ++j) { int ij = i * d->last_dim + j; int ij2 = i * d->last_dim_size + j; k_data cur_k = d->k_plus_G[ij]; for (b = 0; b < cur_num_bands; ++b) assign_t2c(&fft_data_in[3 * (ij2*cur_num_bands + b)], cur_k, &Hin.data[ij * 2 * Hin.p + b + cur_band_start], Hin.p); } /* now, convert to position space via FFT: */ maxwell_compute_fft(+1, d, fft_data_in, fft_data, cur_num_bands*3, cur_num_bands*3, 1); } /**************************************************************************/ /* The following functions take a complex or real vector field in position space, as output by rfftwnd (or rfftwnd_mpi), and compute the "other half" of the array. That is, rfftwnd outputs only half of the logical FFT output, since the other half is redundant (see the FFTW manual). This is fine for computation, but for visualization/output we want the whole array, redundant or not. So, we output the array in two stages, first outputting the array we are given, then using the functions below to compute the other half and outputting that. Given an array A(i,j,k), the redundant half is given by the following identity for transforms of real data: A(nx-i,ny-j,nz-k) = A(i,j,k)* where nx-i/ny-j/nz-k are interpreted modulo nx/ny/nz. (This means that zero coordinates are handled specially: nx-0 = 0.) Note that actually, the other "half" is actually slightly less than half of the array. Note also that the other half, in the case of distributed MPI transforms, is not necessarily contiguous, due to special handling of zero coordinates. There is an additional complication. The array with the symmetry above may have been multiplied by exp(ikx) phases to get its Bloch state. In this case, we must use the identity: A(R-x)*exp(ik(R-x)) = ( A(x) exp(ikx) exp(-ikR) )* where R is a lattice vector. That is, we not only must conjugate and reverse the order, but we also may need to multiply by exp(-ikR) before conjugating. Unfortunately, R depends upon where we are in the array, because of the fact that the indices are interpreted modulo n (i.e. the zero indices aren't reordered). e.g. for the point (nx-i,ny-j,nz-k), R = Rx*(i!=0) + Ry*(j!=0) + Rz*(k!=0). Another complication is that, for 2d rfftwnd_mpi transforms, the truncated dimension (in the transformed, transposed array) is the *first* dimension rather than the last. This code is a little too subtle for my tastes; real FFTs are a pain. */ #define TWOPI 6.2831853071795864769252867665590057683943388 /* This function takes a complex vector field and replaces it with its other "half." phase{x,y,z} is the phase k*R{x,y,z}, in "units" of 2*pi. (Equivalently, phase{x,y,z} is the k vector in the reciprocal lattice basis.) */ void maxwell_vectorfield_otherhalf(maxwell_data *d, scalar_complex *field, real phasex, real phasey, real phasez) { #ifndef SCALAR_COMPLEX int i, j, jmin = 1; int rank, n_other, n_last, n_last_stored, n_last_new, nx, ny, nz, nxmax; # ifdef HAVE_MPI int local_x_start; # endif scalar_complex pz, pxz, pyz, pxyz; nxmax = nx = d->nx; ny = d->ny; nz = d->nz; n_other = d->other_dims; n_last = d->last_dim; n_last_stored = d->last_dim_size / 2; n_last_new = n_last - n_last_stored; /* < n_last_stored always */ rank = (nz == 1) ? (ny == 1 ? 1 : 2) : 3; # ifdef HAVE_MPI local_x_start = d->local_y_start; CHECK(rank == 2 || rank == 3, "unsupported rfftwnd_mpi rank!"); if (rank == 2) { n_other = nx; n_last_new = ny = d->local_ny; if (local_x_start == 0) --n_last_new; /* DC frequency should not be in other half */ else jmin = 0; if (local_x_start + ny == n_last_stored && n_last % 2 == 0) --n_last_new; /* Nyquist freq. should not be in other half */ n_last_stored = ny; } else { /* rank == 3 */ ny = nx; nx = d->local_ny; nxmax = local_x_start ? nx - 1 : nx; n_other = nx * ny; } # endif /* HAVE_MPI */ /* compute p = exp(i*phase) factors: */ phasex *= -TWOPI; phasey *= -TWOPI; phasez *= -TWOPI; switch (rank) { /* treat z as the last/truncated dimension always */ case 3: break; # if defined(HAVE_MPI) && ! defined(SCALAR_COMPLEX) case 2: phasez = phasex; phasex = phasey; phasey = 0; break; # else case 2: phasez = phasey; phasey = 0; break; # endif case 1: phasez = phasex; phasex = phasey = 0; break; } CASSIGN_SCALAR(pz, cos(phasez), sin(phasez)); phasex += phasez; CASSIGN_SCALAR(pxz, cos(phasex), sin(phasex)); phasex += phasey; CASSIGN_SCALAR(pxyz, cos(phasex), sin(phasex)); phasey += phasez; CASSIGN_SCALAR(pyz, cos(phasey), sin(phasey)); /* convenience macros to copy vectors, vectors times phases, and conjugated vectors: */ # define ASSIGN_V(f,k,f2,k2) { f[3*(k)+0] = f2[3*(k2)+0]; \ f[3*(k)+1] = f2[3*(k2)+1]; \ f[3*(k)+2] = f2[3*(k2)+2]; } # define ASSIGN_VP(f,k,f2,k2,p) { CASSIGN_MULT(f[3*(k)+0], f2[3*(k2)+0], p); \ CASSIGN_MULT(f[3*(k)+1], f2[3*(k2)+1], p); \ CASSIGN_MULT(f[3*(k)+2], f2[3*(k2)+2], p); } # define ASSIGN_CV(f,k,f2,k2) { CASSIGN_CONJ(f[3*(k)+0], f2[3*(k2)+0]); \ CASSIGN_CONJ(f[3*(k)+1], f2[3*(k2)+1]); \ CASSIGN_CONJ(f[3*(k)+2], f2[3*(k2)+2]); } /* First, swap the order of elements and multiply by exp(ikR) phase factors. We have to be careful here not to double-swap any element pair; this is prevented by never swapping with a "conjugated" point that is earlier in the array. */ if (rank == 3) { int ix, iy; for (ix = 0; 2*ix <= nxmax; ++ix) { int xdiff, ixc; # ifdef HAVE_MPI if (local_x_start == 0) { xdiff = ix != 0; ixc = (nx - ix) % nx; } else { xdiff = 1; ixc = nx-1 - ix; } # else xdiff = ix != 0; ixc = (nx - ix) % nx; # endif for (iy = 0; iy < ny; ++iy) { int ydiff = iy != 0; int i = ix * ny + iy, ic = ixc * ny + (ny - iy) % ny, jmax; if (ic < i) continue; jmax = n_last_new; if (ic == i) jmax = (jmax + 1) / 2; for (j = 1; j <= jmax; ++j) { int jc = n_last_new + 1 - j; int ij = i*n_last_stored + j; int ijc = ic*n_last_stored + jc; scalar_complex f_tmp[3]; switch (xdiff*2 + ydiff) { /* pick exp(-ikR) phase */ case 3: /* xdiff && ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pxyz); ASSIGN_VP(field, ijc, field, ij, pxyz); ASSIGN_V(field, ij, f_tmp, 0); break; case 2: /* xdiff && !ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pxz); ASSIGN_VP(field, ijc, field, ij, pxz); ASSIGN_V(field, ij, f_tmp, 0); break; case 1: /* !xdiff && ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pyz); ASSIGN_VP(field, ijc, field, ij, pyz); ASSIGN_V(field, ij, f_tmp, 0); break; case 0: /* !xdiff && !ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pz); ASSIGN_VP(field, ijc, field, ij, pz); ASSIGN_V(field, ij, f_tmp, 0); break; } } } } /* Next, conjugate, and remove the holes from the array corresponding to the DC and Nyquist frequencies (which were in the first half already): */ for (i = 0; i < n_other; ++i) for (j = 1; j < n_last_new + 1; ++j) { int ij = i*n_last_stored + j, ijnew = i*n_last_new + j-1; ASSIGN_CV(field, ijnew, field, ij); } } else /* if (rank <= 2) */ { int i; if (rank == 1) /* (note that 1d MPI transforms are not allowed) */ nx = 1; /* x dimension is handled by j (last dimension) loop */ # ifdef HAVE_MPI for (i = 0; i < nx; ++i) # else for (i = 0; 2*i <= nx; ++i) # endif { int xdiff = i != 0, ic = (nx - i) % nx; int jmax = n_last_new + (jmin - 1); # ifndef HAVE_MPI if (ic == i) jmax = (jmax + 1) / 2; # endif for (j = jmin; j <= jmax; ++j) { scalar_complex f_tmp[3]; # ifdef HAVE_MPI int jc = jmax + jmin - j; int ij = j * nx + i; int ijc = jc * nx + ic; if (ijc < ij) break; # else /* ! HAVE_MPI */ int jc = n_last_new + 1 - j; int ij = i*n_last_stored + j; int ijc = ic*n_last_stored + jc; # endif /* ! HAVE_MPI */ if (xdiff) { ASSIGN_VP(f_tmp, 0, field, ijc, pxz); ASSIGN_VP(field, ijc, field, ij, pxz); ASSIGN_V(field, ij, f_tmp, 0); } else { ASSIGN_VP(f_tmp, 0, field, ijc, pz); ASSIGN_VP(field, ijc, field, ij, pz); ASSIGN_V(field, ij, f_tmp, 0); } } } /* Next, conjugate, and remove the holes from the array corresponding to the DC and Nyquist frequencies (which were in the first half already): */ for (i = 0; i < nx; ++i) for (j = jmin; j < n_last_new + jmin; ++j) { # ifdef HAVE_MPI int ij = j*nx + i, ijnew = (j-jmin)*nx + i; # else int ij = i*n_last_stored + j, ijnew = i*n_last_new + j-1; # endif ASSIGN_CV(field, ijnew, field, ij); } } # undef ASSIGN_V # undef ASSIGN_VP # undef ASSIGN_CV #endif /* ! SCALAR_COMPLEX */ } /* as vectorfield_otherhalf, but operates on a complex scalar field ... ugh, copy & paste job */ void maxwell_cscalarfield_otherhalf(maxwell_data *d, scalar_complex *field, real phasex, real phasey, real phasez) { #ifndef SCALAR_COMPLEX int i, j, jmin = 1; int rank, n_other, n_last, n_last_stored, n_last_new, nx, ny, nz, nxmax; # ifdef HAVE_MPI int local_x_start; # endif scalar_complex pz, pxz, pyz, pxyz; nxmax = nx = d->nx; ny = d->ny; nz = d->nz; n_other = d->other_dims; n_last = d->last_dim; n_last_stored = d->last_dim_size / 2; n_last_new = n_last - n_last_stored; /* < n_last_stored always */ rank = (nz == 1) ? (ny == 1 ? 1 : 2) : 3; # ifdef HAVE_MPI local_x_start = d->local_y_start; CHECK(rank == 2 || rank == 3, "unsupported rfftwnd_mpi rank!"); if (rank == 2) { n_other = nx; n_last_new = ny = d->local_ny; if (local_x_start == 0) --n_last_new; /* DC frequency should not be in other half */ else jmin = 0; if (local_x_start + ny == n_last_stored && n_last % 2 == 0) --n_last_new; /* Nyquist freq. should not be in other half */ n_last_stored = ny; } else { /* rank == 3 */ ny = nx; nx = d->local_ny; nxmax = local_x_start ? nx - 1 : nx; n_other = nx * ny; } # endif /* HAVE_MPI */ /* compute p = exp(i*phase) factors: */ phasex *= -TWOPI; phasey *= -TWOPI; phasez *= -TWOPI; switch (rank) { /* treat z as the last/truncated dimension always */ case 3: break; # if defined(HAVE_MPI) && ! defined(SCALAR_COMPLEX) case 2: phasez = phasex; phasex = phasey; phasey = 0; break; # else case 2: phasez = phasey; phasey = 0; break; # endif case 1: phasez = phasex; phasex = phasey = 0; break; } CASSIGN_SCALAR(pz, cos(phasez), sin(phasez)); phasex += phasez; CASSIGN_SCALAR(pxz, cos(phasex), sin(phasex)); phasex += phasey; CASSIGN_SCALAR(pxyz, cos(phasex), sin(phasex)); phasey += phasez; CASSIGN_SCALAR(pyz, cos(phasey), sin(phasey)); /* convenience macros to copy cscalars, cscalars times phases, and conjugated cscalars (THIS IS THE ONLY CODE THAT WAS CHANGED COMPARED TO vectorfield_otherhalf): */ # define ASSIGN_V(f,k,f2,k2) { f[k] = f2[k2]; } # define ASSIGN_VP(f,k,f2,k2,p) { CASSIGN_MULT(f[k], f2[k2], p); } # define ASSIGN_CV(f,k,f2,k2) { CASSIGN_CONJ(f[k], f2[k2]); } /* First, swap the order of elements and multiply by exp(ikR) phase factors. We have to be careful here not to double-swap any element pair; this is prevented by never swapping with a "conjugated" point that is earlier in the array. */ if (rank == 3) { int ix, iy; for (ix = 0; 2*ix <= nxmax; ++ix) { int xdiff, ixc; # ifdef HAVE_MPI if (local_x_start == 0) { xdiff = ix != 0; ixc = (nx - ix) % nx; } else { xdiff = 1; ixc = nx-1 - ix; } # else xdiff = ix != 0; ixc = (nx - ix) % nx; # endif for (iy = 0; iy < ny; ++iy) { int ydiff = iy != 0; int i = ix * ny + iy, ic = ixc * ny + (ny - iy) % ny, jmax; if (ic < i) continue; jmax = n_last_new; if (ic == i) jmax = (jmax + 1) / 2; for (j = 1; j <= jmax; ++j) { int jc = n_last_new + 1 - j; int ij = i*n_last_stored + j; int ijc = ic*n_last_stored + jc; scalar_complex f_tmp[3]; switch (xdiff*2 + ydiff) { /* pick exp(-ikR) phase */ case 3: /* xdiff && ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pxyz); ASSIGN_VP(field, ijc, field, ij, pxyz); ASSIGN_V(field, ij, f_tmp, 0); break; case 2: /* xdiff && !ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pxz); ASSIGN_VP(field, ijc, field, ij, pxz); ASSIGN_V(field, ij, f_tmp, 0); break; case 1: /* !xdiff && ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pyz); ASSIGN_VP(field, ijc, field, ij, pyz); ASSIGN_V(field, ij, f_tmp, 0); break; case 0: /* !xdiff && !ydiff */ ASSIGN_VP(f_tmp, 0, field, ijc, pz); ASSIGN_VP(field, ijc, field, ij, pz); ASSIGN_V(field, ij, f_tmp, 0); break; } } } } /* Next, conjugate, and remove the holes from the array corresponding to the DC and Nyquist frequencies (which were in the first half already): */ for (i = 0; i < n_other; ++i) for (j = 1; j < n_last_new + 1; ++j) { int ij = i*n_last_stored + j, ijnew = i*n_last_new + j-1; ASSIGN_CV(field, ijnew, field, ij); } } else /* if (rank <= 2) */ { int i; if (rank == 1) /* (note that 1d MPI transforms are not allowed) */ nx = 1; /* x dimension is handled by j (last dimension) loop */ # ifdef HAVE_MPI for (i = 0; i < nx; ++i) # else for (i = 0; 2*i <= nx; ++i) # endif { int xdiff = i != 0, ic = (nx - i) % nx; int jmax = n_last_new + (jmin - 1); # ifndef HAVE_MPI if (ic == i) jmax = (jmax + 1) / 2; # endif for (j = jmin; j <= jmax; ++j) { scalar_complex f_tmp[3]; # ifdef HAVE_MPI int jc = jmax + jmin - j; int ij = j * nx + i; int ijc = jc * nx + ic; if (ijc < ij) break; # else /* ! HAVE_MPI */ int jc = n_last_new + 1 - j; int ij = i*n_last_stored + j; int ijc = ic*n_last_stored + jc; # endif /* ! HAVE_MPI */ if (xdiff) { ASSIGN_VP(f_tmp, 0, field, ijc, pxz); ASSIGN_VP(field, ijc, field, ij, pxz); ASSIGN_V(field, ij, f_tmp, 0); } else { ASSIGN_VP(f_tmp, 0, field, ijc, pz); ASSIGN_VP(field, ijc, field, ij, pz); ASSIGN_V(field, ij, f_tmp, 0); } } } /* Next, conjugate, and remove the holes from the array corresponding to the DC and Nyquist frequencies (which were in the first half already): */ for (i = 0; i < nx; ++i) for (j = jmin; j < n_last_new + jmin; ++j) { # ifdef HAVE_MPI int ij = j*nx + i, ijnew = (j-jmin)*nx + i; # else int ij = i*n_last_stored + j, ijnew = i*n_last_new + j-1; # endif ASSIGN_CV(field, ijnew, field, ij); } } # undef ASSIGN_V # undef ASSIGN_VP # undef ASSIGN_CV #endif /* ! SCALAR_COMPLEX */ } /* Similar to vectorfield_otherhalf, above, except that it operates on a real scalar field, which is assumed to have come from e.g. the absolute values of a complex field (and thus no phase factors or conjugations are necessary). */ void maxwell_scalarfield_otherhalf(maxwell_data *d, real *field) { #ifndef SCALAR_COMPLEX int i, j, jmin = 1; int rank, n_other, n_last, n_last_stored, n_last_new, nx, ny, nz, nxmax; # ifdef HAVE_MPI int local_x_start; # endif nxmax = nx = d->nx; ny = d->ny; nz = d->nz; n_other = d->other_dims; n_last = d->last_dim; n_last_stored = d->last_dim_size / 2; n_last_new = n_last - n_last_stored; /* < n_last_stored always */ rank = (nz == 1) ? (ny == 1 ? 1 : 2) : 3; # ifdef HAVE_MPI local_x_start = d->local_y_start; CHECK(rank == 2 || rank == 3, "unsupported rfftwnd_mpi rank!"); if (rank == 2) { n_other = nx; n_last_new = ny = d->local_ny; if (local_x_start == 0) --n_last_new; /* DC frequency should not be in other half */ else jmin = 0; if (local_x_start + ny == n_last_stored && n_last % 2 == 0) --n_last_new; /* Nyquist freq. should not be in other half */ n_last_stored = ny; } else { /* rank == 3 */ ny = nx; nx = d->local_ny; nxmax = local_x_start ? nx - 1 : nx; n_other = nx * ny; } # endif /* HAVE_MPI */ /* First, swap the order of elements and multiply by exp(ikR) phase factors. We have to be careful here not to double-swap any element pair; this is prevented by never swapping with a "conjugated" point that is earlier in the array. */ if (rank == 3) { int ix, iy; for (ix = 0; 2*ix <= nxmax; ++ix) { int ixc; # ifdef HAVE_MPI if (local_x_start == 0) ixc = (nx - ix) % nx; else ixc = nx-1 - ix; # else ixc = (nx - ix) % nx; # endif for (iy = 0; iy < ny; ++iy) { int i = ix * ny + iy, ic = ixc * ny + (ny - iy) % ny, jmax; if (ic < i) continue; jmax = n_last_new; if (ic == i) jmax = (jmax + 1) / 2; for (j = 1; j <= jmax; ++j) { int jc = n_last_new + 1 - j; int ij = i*n_last_stored + j; int ijc = ic*n_last_stored + jc; real f_tmp; f_tmp = field[ijc]; field[ijc] = field[ij]; field[ij] = f_tmp; } } } /* Next, conjugate, and remove the holes from the array corresponding to the DC and Nyquist frequencies (which were in the first half already): */ for (i = 0; i < n_other; ++i) for (j = 1; j < n_last_new + 1; ++j) { int ij = i*n_last_stored + j, ijnew = i*n_last_new + j-1; field[ijnew] = field[ij]; } } else /* if (rank <= 2) */ { int i; if (rank == 1) /* (note that 1d MPI transforms are not allowed) */ nx = 1; /* x dimension is handled by j (last dimension) loop */ # ifdef HAVE_MPI for (i = 0; i < nx; ++i) # else for (i = 0; 2*i <= nx; ++i) # endif { int ic = (nx - i) % nx; int jmax = n_last_new + (jmin - 1); # ifndef HAVE_MPI if (ic == i) jmax = (jmax + 1) / 2; # endif for (j = jmin; j <= jmax; ++j) { real f_tmp; # ifdef HAVE_MPI int jc = jmax + jmin - j; int ij = j * nx + i; int ijc = jc * nx + ic; if (ijc < ij) break; # else /* ! HAVE_MPI */ int jc = n_last_new + 1 - j; int ij = i*n_last_stored + j; int ijc = ic*n_last_stored + jc; # endif /* ! HAVE_MPI */ f_tmp = field[ijc]; field[ijc] = field[ij]; field[ij] = f_tmp; } } /* Next, remove the holes from the array corresponding to the DC and Nyquist frequencies (which were in the first half already): */ for (i = 0; i < nx; ++i) for (j = jmin; j < n_last_new + jmin; ++j) { # ifdef HAVE_MPI int ij = j*nx + i, ijnew = (j-jmin)*nx + i; # else int ij = i*n_last_stored + j, ijnew = i*n_last_new + j-1; # endif field[ijnew] = field[ij]; } } #endif /* ! SCALAR_COMPLEX */ } /**************************************************************************/ #define MIN2(a,b) ((a) < (b) ? (a) : (b)) /* Compute Xout = curl(1/epsilon * curl(Xin)) */ void maxwell_operator(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work) { maxwell_data *d = (maxwell_data *) data; int cur_band_start; scalar_complex *cdata; real scale; CHECK(d, "null maxwell data pointer!"); CHECK(Xin.c == 2, "fields don't have 2 components!"); (void) is_current_eigenvector; /* unused */ (void) Work; cdata = (scalar_complex *) d->fft_data; scale = -1.0 / Xout.N; /* scale factor to normalize FFT; negative sign comes from 2 i's from curls */ /* compute the operator, num_fft_bands at a time: */ for (cur_band_start = 0; cur_band_start < Xin.p; cur_band_start += d->num_fft_bands) { int cur_num_bands = MIN2(d->num_fft_bands, Xin.p - cur_band_start); maxwell_compute_d_from_H(d, Xin, cdata, cur_band_start, cur_num_bands); maxwell_compute_e_from_d(d, cdata, cur_num_bands); maxwell_compute_H_from_e(d, Xout, cdata, cur_band_start, cur_num_bands, scale); } } /* Compute the operation Xout = (M - w^2) Xin, where M is the Maxwell operator and w is the target frequency. This shifts the eigenvalue spectrum so that the smallest magnitude eigenvalues are those nearest to w. However, there are negative eigenvalues (the operator is not positive-definite), and the smallest eigenvectors (not taking the absolute value) are the same as those of M. */ void maxwell_target_operator1(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work) { maxwell_target_data *d = (maxwell_target_data *) data; real omega_sqr = d->target_frequency * d->target_frequency; maxwell_operator(Xin, Xout, d->d, is_current_eigenvector, Work); evectmatrix_aXpbY(1.0, Xout, -omega_sqr, Xin); } /* Compute the operation Xout = (M - w^2)^2 Xin, where M is the Maxwell operator and w is the target frequency. This shifts the eigenvalue spectrum so that the smallest eigenvalues are those nearest to w. */ void maxwell_target_operator(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work) { if (Xin.n != 0) CHECK(Work.data && Work.data != Xin.data && Work.data != Xout.data, "maxwell_target_operator must have distinct workspace!"); maxwell_target_operator1(Xin, Work, data, is_current_eigenvector, Xout); /* N.B. maxwell_operator(), and thus maxwell_target_operator1(), doesn't actually need the workspace, so we can safely pass Work here for the scratch parameter: */ maxwell_target_operator1(Work, Xout, data, is_current_eigenvector, Work); } /* Compute the operation Xout = curl 1/epsilon * i u x Xin, which is useful operation in computing the group velocity (derivative of the maxwell operator). u is a vector in cartesian coordinates. */ void maxwell_ucross_op(evectmatrix Xin, evectmatrix Xout, maxwell_data *d, const real u[3]) { scalar *fft_data, *fft_data_in; scalar_complex *cdata; real scale; int cur_band_start; int i, j, b; CHECK(d, "null maxwell data pointer!"); CHECK(Xin.c == 2, "fields don't have 2 components!"); cdata = (scalar_complex *) (fft_data = d->fft_data); fft_data_in = d->fft_data2; scale = -1.0 / Xout.N; /* scale factor to normalize FFT; negative sign comes from 2 i's from curls */ /* compute the operator, num_fft_bands at a time: */ for (cur_band_start = 0; cur_band_start < Xin.p; cur_band_start += d->num_fft_bands) { int cur_num_bands = MIN2(d->num_fft_bands, Xin.p - cur_band_start); /* first, compute fft_data = u x Xin: */ for (i = 0; i < d->other_dims; ++i) for (j = 0; j < d->last_dim; ++j) { int ij = i * d->last_dim + j; int ij2 = i * d->last_dim_size + j; k_data cur_k = d->k_plus_G[ij]; for (b = 0; b < cur_num_bands; ++b) assign_ucross_t2c(&fft_data_in[3 * (ij2*cur_num_bands + b)], u, cur_k, &Xin.data[ij * 2 * Xin.p + b + cur_band_start], Xin.p); } /* now, convert to position space via FFT: */ maxwell_compute_fft(+1, d, fft_data_in, fft_data, cur_num_bands*3, cur_num_bands*3, 1); maxwell_compute_e_from_d(d, cdata, cur_num_bands); maxwell_compute_H_from_e(d, Xout, cdata, cur_band_start, cur_num_bands, scale); } } mpb-1.5/src/maxwell/Makefile.am0000644000175400001440000000036612315326040013353 00000000000000noinst_LTLIBRARIES = libmaxwell.la EXTRA_DIST = README libmaxwell_la_SOURCES = imaxwell.h maxwell.c maxwell.h \ maxwell_constraints.c maxwell_eps.c maxwell_op.c maxwell_pre.c libmaxwell_la_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../matrices mpb-1.5/src/maxwell/maxwell_pre.c0000644000175400001440000002340112315341423013777 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include "maxwell.h" #define PRECOND_SUBTR_EIGS 0 #define PRECOND_MIN_DENOM 5e-3 #define MIN2(a,b) ((a) < (b) ? (a) : (b)) #define MAX2(a,b) ((a) > (b) ? (a) : (b)) /* used to be: MAX2(x, PRECOND_MIN_DENOM) but now zero k-point is handled specially */ #define FIX_DENOM(x) ((x) == 0 ? 1.0 : (x)) void maxwell_simple_precondition(evectmatrix X, void *data, real *eigenvals) { maxwell_data *d = (maxwell_data *) data; int i, c, b; real *kpGn2 = d->k_plus_G_normsqr; #if !PRECOND_SUBTR_EIGS (void) eigenvals; /* unused */ #endif for (i = 0; i < X.localN; ++i) { for (c = 0; c < X.c; ++c) { for (b = 0; b < X.p; ++b) { int index = (i * X.c + c) * X.p + b; real scale = kpGn2[i] * d->eps_inv_mean; #if PRECOND_SUBTR_EIGS if (eigenvals) { scale -= eigenvals[b]; scale = 1.0 / (scale + copysign(PRECOND_MIN_DENOM, scale)); } else #else { scale = 1.0 / FIX_DENOM(scale); } #endif ASSIGN_SCALAR(X.data[index], scale * SCALAR_RE(X.data[index]), scale * SCALAR_IM(X.data[index])); } } } } void maxwell_preconditioner(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { (void) Y; /* unused */ evectmatrix_XeYS(Xout, Xin, YtY, 1); maxwell_simple_precondition(Xout, data, eigenvals); } void maxwell_target_preconditioner(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { maxwell_target_data *td = (maxwell_target_data *) data; maxwell_data *d = td->d; #if PRECOND_SUBTR_EIGS real omega_sqr = td->target_frequency * td->target_frequency; #endif int i, c, b; real *kpGn2 = d->k_plus_G_normsqr; (void) Y; /* unused */ #if !PRECOND_SUBTR_EIGS (void) eigenvals; /* unused */ #endif evectmatrix_XeYS(Xout, Xin, YtY, 1); for (i = 0; i < Xout.localN; ++i) { for (c = 0; c < Xout.c; ++c) { for (b = 0; b < Xout.p; ++b) { int index = (i * Xout.c + c) * Xout.p + b; real scale = kpGn2[i] * d->eps_inv_mean; #if PRECOND_SUBTR_EIGS scale -= omega_sqr; #endif scale = scale * scale; #if PRECOND_SUBTR_EIGS if (eigenvals) { scale -= eigenvals[b]; scale = 1.0 / (scale + copysign(PRECOND_MIN_DENOM, scale)); } else #else { scale = 1.0 / FIX_DENOM(scale); } #endif ASSIGN_SCALAR(Xout.data[index], scale * SCALAR_RE(Xout.data[index]), scale * SCALAR_IM(Xout.data[index])); } } } } /**************************************************************************/ /* Fancy preconditioners */ /* Compute 'a' where v = k x a (cross product). Here, a = (a[0],a[1],a[2]) and k = (k.kx,k.ky,k.kz) are in cartesian coordinates. (v[0],v[vstride]) is in the transverse basis of k.m and k.n. We can't compute 'a' exactly, since there is no way to find the component of a parallel to k. So, we only compute the transverse component of 'a'--this is the main approximation in our preconditioner. */ static void assign_crossinv_t2c(scalar *a, const k_data k, const scalar *v, int vstride) { /* k x v = k x (k x a) = (k*a)k - k^2 a = -(a_transverse) * k^2 ==> a_transverse = -1/k^2 * k x v */ /* Thus, we just do the same thing as assign_cross_t2c in maxwell_op.c, except that we divide by -k^2: */ scalar v0 = v[0], v1 = v[vstride]; real kmag_inv = -1.0 / FIX_DENOM(k.kmag); ASSIGN_SCALAR(a[0], (SCALAR_RE(v0)*k.nx - SCALAR_RE(v1)*k.mx) * kmag_inv, (SCALAR_IM(v0)*k.nx - SCALAR_IM(v1)*k.mx) * kmag_inv); ASSIGN_SCALAR(a[1], (SCALAR_RE(v0)*k.ny - SCALAR_RE(v1)*k.my) * kmag_inv, (SCALAR_IM(v0)*k.ny - SCALAR_IM(v1)*k.my) * kmag_inv); ASSIGN_SCALAR(a[2], (SCALAR_RE(v0)*k.nz - SCALAR_RE(v1)*k.mz) * kmag_inv, (SCALAR_IM(v0)*k.nz - SCALAR_IM(v1)*k.mz) * kmag_inv); } /* Compute 'v' * scale, where a = k x v, going from cartesian to transverse coordinates. Since v is tranvserse to k, we can compute this inverse exactly. */ static void assign_crossinv_c2t(scalar *v, int vstride, const k_data k, const scalar *a, real scale) { /* As in assign_crossinv_t2c above, we find: v = v_transverse = -1/k^2 * k x a So, we do the same thing as in assign_cross_c2t of maxwell_op.c, with the additional -1/k^2 factor. */ scalar a0 = a[0], a1 = a[1], a2 = a[2]; scalar at0, at1; ASSIGN_SCALAR(at0, SCALAR_RE(a0)*k.mx + SCALAR_RE(a1)*k.my + SCALAR_RE(a2)*k.mz, SCALAR_IM(a0)*k.mx + SCALAR_IM(a1)*k.my + SCALAR_IM(a2)*k.mz); ASSIGN_SCALAR(at1, SCALAR_RE(a0)*k.nx + SCALAR_RE(a1)*k.ny + SCALAR_RE(a2)*k.nz, SCALAR_IM(a0)*k.nx + SCALAR_IM(a1)*k.ny + SCALAR_IM(a2)*k.nz); /* combine scale factor and k * (-1/k^2) */ scale = -scale / FIX_DENOM(k.kmag); ASSIGN_SCALAR(v[0], - scale * SCALAR_RE(at1), - scale * SCALAR_IM(at1)); ASSIGN_SCALAR(v[vstride], scale * SCALAR_RE(at0), scale * SCALAR_IM(at0)); } /* Fancy preconditioner. This is very similar to maxwell_op, except that the steps are (approximately) inverted: */ void maxwell_preconditioner2(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { maxwell_data *d = (maxwell_data *) data; int cur_band_start; scalar *fft_data, *fft_data2; scalar_complex *cdata; real scale; int i, j, b; (void) Y; /* unused */ (void) eigenvals; /* unused */ CHECK(d, "null maxwell data pointer!"); CHECK(Xin.c == 2, "fields don't have 2 components!"); if (Xout.data != Xin.data) evectmatrix_XeYS(Xout, Xin, YtY, 1); fft_data = d->fft_data; fft_data2 = d->fft_data2; cdata = (scalar_complex *) fft_data; scale = -1.0 / Xout.N; /* scale factor to normalize FFT; negative sign comes from 2 i's from curls */ for (cur_band_start = 0; cur_band_start < Xout.p; cur_band_start += d->num_fft_bands) { int cur_num_bands = MIN2(d->num_fft_bands, Xout.p - cur_band_start); /********************************************/ /* Compute approx. inverse of curl (inverse cross product with k): */ for (i = 0; i < d->other_dims; ++i) for (j = 0; j < d->last_dim; ++j) { int ij = i * d->last_dim + j; int ij2 = i * d->last_dim_size + j; k_data cur_k = d->k_plus_G[ij]; for (b = 0; b < cur_num_bands; ++b) assign_crossinv_t2c(&fft_data2[3 * (ij2*cur_num_bands + b)], cur_k, &Xout.data[ij * 2 * Xout.p + b + cur_band_start], Xout.p); } /********************************************/ /* Multiply by epsilon: */ /* convert to position space via FFT: */ maxwell_compute_fft(+1, d, fft_data2, fft_data, cur_num_bands*3, cur_num_bands*3, 1); /* multiply by epsilon in position space. Don't bother to invert the whole epsilon-inverse tensor; just take the inverse of the average epsilon-inverse (= trace / 3). */ for (i = 0; i < d->fft_output_size; ++i) { symmetric_matrix eps_inv = d->eps_inv[i]; real eps = 3.0 / (eps_inv.m00 + eps_inv.m11 + eps_inv.m22); for (b = 0; b < cur_num_bands; ++b) { int ib = 3 * (i * cur_num_bands + b); cdata[ib].re *= eps; cdata[ib].im *= eps; cdata[ib+1].re *= eps; cdata[ib+1].im *= eps; cdata[ib+2].re *= eps; cdata[ib+2].im *= eps; } } /* convert back to Fourier space */ maxwell_compute_fft(-1, d, fft_data, fft_data2, cur_num_bands*3, cur_num_bands*3, 1); /********************************************/ /* Finally, do second inverse curl (inverse cross product with k): */ for (i = 0; i < d->other_dims; ++i) for (j = 0; j < d->last_dim; ++j) { int ij = i * d->last_dim + j; int ij2 = i * d->last_dim_size + j; k_data cur_k = d->k_plus_G[ij]; for (b = 0; b < cur_num_bands; ++b) assign_crossinv_c2t(&Xout.data[ij * 2 * Xout.p + b + cur_band_start], Xout.p, cur_k, &fft_data2[3 * (ij2*cur_num_bands + b)], scale); } /********************************************/ } /* end of cur_band_start loop */ } void maxwell_target_preconditioner2(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY) { maxwell_target_data *d = (maxwell_target_data *) data; maxwell_preconditioner2(Xin, Xout, d->d, Y, eigenvals, YtY); maxwell_preconditioner2(Xout, Xout, d->d, Y, eigenvals, YtY); } mpb-1.5/src/maxwell/maxwell_constraints.c0000644000175400001440000003002012315341423015553 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include "maxwell.h" /**************************************************************************/ /* function to call z and y parity constraints, if necessary */ void maxwell_parity_constraint(evectmatrix X, void *data) { maxwell_data *d = (maxwell_data *) data; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); if (d->parity & (EVEN_Z_PARITY | ODD_Z_PARITY)) maxwell_zparity_constraint(X, data); if (d->parity & (EVEN_Y_PARITY | ODD_Y_PARITY)) maxwell_yparity_constraint(X, data); } /**************************************************************************/ /* In 3d dielectric structures having a z=0 mirror plane (symmetric under z -> -z), the states will exhibit an analogue of TM and TE polarizations (when k has no z-component to break the symmetry). In this case, the states can be classified as "even" or "odd" with respect to mirror-flips through z=0. This is referred to as the "parity" of the state, where even is parity +1 and odd is parity -1 (the state is an eigenvector of the mirror flip operator with this eigenvalue). Even/odd states are the analogues of TE/TM states, respectively (and in the mirror plane itself they are truly TE/TM polarized). Note that the magnetic field is a pseudo-vector, so the mirror operation acts specially on it. Also, because of the way the m,n transverse basis for H is chosen, the basis vectors transform in a very simple way (just flip sign). */ /* Project X to its even or odd component, so that we can solve for only one parity of states (the projection operator, like the mirror flip operator, commutes with the Maxwell operator, so this projection should not slow convergence). */ void maxwell_zparity_constraint(evectmatrix X, void *data) { maxwell_data *d = (maxwell_data *) data; int i, j, b, nxy, nz; int zparity = ((d->parity & EVEN_Z_PARITY) ? +1 : ((d->parity & ODD_Z_PARITY) ? -1 : 0)); if (zparity == 0) return; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); if (d->nz > 1) { nxy = d->other_dims; nz = d->last_dim; } else { /* common case (2d system): even/odd == TE/TM */ nxy = d->other_dims * d->last_dim; if (zparity == +1) for (i = 0; i < nxy; ++i) for (b = 0; b < X.p; ++b) { ASSIGN_ZERO(X.data[(i * X.c + 1) * X.p + b]); } else if (zparity == -1) for (i = 0; i < nxy; ++i) for (b = 0; b < X.p; ++b) { ASSIGN_ZERO(X.data[(i * X.c) * X.p + b]); } return; } for (i = 0; i < nxy; ++i) { for (j = 0; 2*j <= nz; ++j) { int ij = i * nz + j; int ij2 = i * nz + (j > 0 ? nz - j : 0); for (b = 0; b < X.p; ++b) { scalar u,v, u2,v2; u = X.data[(ij * 2) * X.p + b]; v = X.data[(ij * 2 + 1) * X.p + b]; u2 = X.data[(ij2 * 2) * X.p + b]; v2 = X.data[(ij2 * 2 + 1) * X.p + b]; ASSIGN_SCALAR(X.data[(ij * 2) * X.p + b], 0.5*(SCALAR_RE(u) + zparity*SCALAR_RE(u2)), 0.5*(SCALAR_IM(u) + zparity*SCALAR_IM(u2))); ASSIGN_SCALAR(X.data[(ij * 2 + 1) * X.p + b], 0.5*(SCALAR_RE(v) - zparity*SCALAR_RE(v2)), 0.5*(SCALAR_IM(v) - zparity*SCALAR_IM(v2))); ASSIGN_SCALAR(X.data[(ij2 * 2) * X.p + b], 0.5*(SCALAR_RE(u2) + zparity*SCALAR_RE(u)), 0.5*(SCALAR_IM(u2) + zparity*SCALAR_IM(u))); ASSIGN_SCALAR(X.data[(ij2 * 2 + 1) * X.p + b], 0.5*(SCALAR_RE(v2) - zparity*SCALAR_RE(v)), 0.5*(SCALAR_IM(v2) - zparity*SCALAR_IM(v))); } } } } /* Compute the parity of all of the states in X, returning an array of the parities (which the caller should deallocate with free). The parity of an arbitrary state is defined as the expectation value of the mirror flip operator, and will be +1/-1 for even/odd eigenstates and something in between for everything else. Assumes that the columns of X are normalized to 1. */ double *maxwell_zparity(evectmatrix X, maxwell_data *d) { int i, j, b, nxy, nz; double *zparity, *zp_scratch; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); CHK_MALLOC(zparity, double, X.p); CHK_MALLOC(zp_scratch, double, X.p); for (b = 0; b < X.p; ++b) zp_scratch[b] = 0.0; if (d->nz > 1) { nxy = d->other_dims; nz = d->last_dim; } else { nxy = d->other_dims * d->last_dim; nz = 1; } for (i = 0; i < nxy; ++i) for (j = 0; 2*j <= nz; ++j) { int ij = i * nz + j; int ij2 = i * nz + (j > 0 ? nz - j : 0); for (b = 0; b < X.p; ++b) { scalar u,v, u2,v2; u = X.data[(ij * 2) * X.p + b]; v = X.data[(ij * 2 + 1) * X.p + b]; u2 = X.data[(ij2 * 2) * X.p + b]; v2 = X.data[(ij2 * 2 + 1) * X.p + b]; zp_scratch[b] += (ij == ij2 ? 1.0 : 2.0) * (SCALAR_RE(u) * SCALAR_RE(u2) + SCALAR_IM(u) * SCALAR_IM(u2) - SCALAR_RE(v) * SCALAR_RE(v2) - SCALAR_IM(v) * SCALAR_IM(v2)); } } mpi_allreduce(zp_scratch, zparity, X.p, double, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); free(zp_scratch); return zparity; } /**************************************************************************/ /* Similar to the zparity functions above, but for the y -> -y mirror flip. */ /* Project X to its even or odd component, so that we can solve for only one parity of states (the projection operator, like the mirror flip operator, commutes with the Maxwell operator, so this projection should not slow convergence). */ void maxwell_yparity_constraint(evectmatrix X, void *data) { maxwell_data *d = (maxwell_data *) data; int i, j, k, b, nx, ny, nz; int yparity = ((d->parity & EVEN_Y_PARITY) ? +1 : ((d->parity & ODD_Y_PARITY) ? -1 : 0)); if (yparity == 0) return; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); nx = d->local_nx; ny = d->ny; nz = d->nz; for (i = 0; i < nx; ++i) { for (j = 0; 2*j <= ny; ++j) { int ij = i * ny + j; int ij2 = i * ny + (j > 0 ? ny - j : 0); for (k = 0; k < nz; ++k) { int ijk = ij * nz + k; int ijk2 = ij2 * nz + k; for (b = 0; b < X.p; ++b) { scalar u,v, u2,v2; u = X.data[(ijk * 2) * X.p + b]; v = X.data[(ijk * 2 + 1) * X.p + b]; u2 = X.data[(ijk2 * 2) * X.p + b]; v2 = X.data[(ijk2 * 2 + 1) * X.p + b]; ASSIGN_SCALAR(X.data[(ijk * 2) * X.p + b], 0.5*(SCALAR_RE(u) - yparity*SCALAR_RE(u2)), 0.5*(SCALAR_IM(u) - yparity*SCALAR_IM(u2))); ASSIGN_SCALAR(X.data[(ijk * 2 + 1) * X.p + b], 0.5*(SCALAR_RE(v) + yparity*SCALAR_RE(v2)), 0.5*(SCALAR_IM(v) + yparity*SCALAR_IM(v2))); ASSIGN_SCALAR(X.data[(ijk2 * 2) * X.p + b], 0.5*(SCALAR_RE(u2) - yparity*SCALAR_RE(u)), 0.5*(SCALAR_IM(u2) - yparity*SCALAR_IM(u))); ASSIGN_SCALAR(X.data[(ijk2 * 2 + 1) * X.p + b], 0.5*(SCALAR_RE(v2) + yparity*SCALAR_RE(v)), 0.5*(SCALAR_IM(v2) + yparity*SCALAR_IM(v))); } } } } } /* Compute the parity of all of the states in X, returning an array of the parities (which the caller should deallocate with free). The parity of an arbitrary state is defined as the expectation value of the mirror flip operator, and will be +1/-1 for even/odd eigenstates and something in between for everything else. Assumes that the columns of X are normalized to 1. */ double *maxwell_yparity(evectmatrix X, maxwell_data *d) { int i, j, k, b, nx, ny, nz; double *yparity, *yp_scratch; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); CHK_MALLOC(yparity, double, X.p); CHK_MALLOC(yp_scratch, double, X.p); for (b = 0; b < X.p; ++b) yp_scratch[b] = 0.0; nx = d->local_nx; ny = d->ny; nz = d->nz; for (i = 0; i < nx; ++i) { for (j = 0; 2*j <= ny; ++j) { int ij = i * ny + j; int ij2 = i * ny + (j > 0 ? ny - j : 0); for (k = 0; k < nz; ++k) { int ijk = ij * nz + k; int ijk2 = ij2 * nz + k; for (b = 0; b < X.p; ++b) { scalar u,v, u2,v2; u = X.data[(ijk * 2) * X.p + b]; v = X.data[(ijk * 2 + 1) * X.p + b]; u2 = X.data[(ijk2 * 2) * X.p + b]; v2 = X.data[(ijk2 * 2 + 1) * X.p + b]; yp_scratch[b] += (ijk == ijk2 ? 1.0 : 2.0) * (SCALAR_RE(v) * SCALAR_RE(v2) + SCALAR_IM(v) * SCALAR_IM(v2) - SCALAR_RE(u) * SCALAR_RE(u2) - SCALAR_IM(u) * SCALAR_IM(u2)); } } } } mpi_allreduce(yp_scratch, yparity, X.p, double, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); free(yp_scratch); return yparity; } /**************************************************************************/ /* to fix problems with slow convergence for k ~ 0, manually "put in" the k = 0 solution: first two bands are constant and higher bands are orthogonal. Note that in the TE/TM case, only one band is constant. Also note that, in Fourier space, a constant field corresponds to 1 in the DC component and 0 elsewhere. */ /* return the number of constant (zero-frequency) bands: */ int maxwell_zero_k_num_const_bands(evectmatrix X, maxwell_data *d) { int num_const_bands, m_band = 1, n_band = 1; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); if (d->parity & (ODD_Z_PARITY | EVEN_Y_PARITY)) m_band = 0; if (d->parity & (ODD_Y_PARITY | EVEN_Z_PARITY)) n_band = 0; num_const_bands = m_band + n_band; if (num_const_bands > X.p) num_const_bands = X.p; return num_const_bands; } void maxwell_zero_k_set_const_bands(evectmatrix X, maxwell_data *d) { int i, j, num_const_bands, m_band = 1, n_band = 1; CHECK(d, "null maxwell data pointer!"); CHECK(X.c == 2, "fields don't have 2 components!"); if (X.p < 1) return; num_const_bands = maxwell_zero_k_num_const_bands(X, d); /* Initialize num_const_bands to zero: */ for (i = 0; i < X.n; ++i) for (j = 0; j < num_const_bands; ++j) { ASSIGN_ZERO(X.data[i * X.p + j]); } if (X.Nstart > 0) return; /* DC frequency is not on this process */ /* Set DC components to 1 (in two parities) for num_const_bands: */ if (d->parity & (ODD_Z_PARITY | EVEN_Y_PARITY)) m_band = 0; if (d->parity & (ODD_Y_PARITY | EVEN_Z_PARITY)) n_band = 0; if (m_band) { ASSIGN_SCALAR(X.data[0], 1.0, 0.0); ASSIGN_SCALAR(X.data[X.p], 0.0, 0.0); } if (n_band && (!m_band || X.p >= 2)) { ASSIGN_SCALAR(X.data[m_band], 0.0, 0.0); ASSIGN_SCALAR(X.data[X.p + m_band], 1.0, 0.0); } } /* during eigensolution (for upper bands), their DC components are constrained to be zero */ void maxwell_zero_k_constraint(evectmatrix X, void *data) { int j; if (X.Nstart > 0) return; /* DC frequency is not on this process */ for (j = 0; j < X.p; ++j) { ASSIGN_ZERO(X.data[j]); ASSIGN_ZERO(X.data[X.p + j]); } (void)data; /* avoid warning about unused parameter */ } /**************************************************************************/ mpb-1.5/src/maxwell/README0000644000175400001440000000073512315323755012211 00000000000000This directory contains code for operating the Maxwell operator on a vector field: MaxwellOp(V) = curl(1/eps * curl(V)) We store V in a Fourier basis, so that the curl operation is diagonal. To multiply by epsilon-inverse, we use a pair of FFTs to transform to and from position space. Also included are initialization routines for the auxiliary data and storage required by MaxwellOp, as well as subsidiary routines to compute things like the curl and the energy density. mpb-1.5/src/maxwell/maxwell_eps.c0000644000175400001440000007105312315341423014006 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include #include #include "maxwell.h" /**************************************************************************/ /* Lapack eigenvalue functions */ #ifdef SCALAR_SINGLE_PREC # define HEEV F77_FUNC(cheev,CHEEV) # define SYEV F77_FUNC(ssyev,SSYEV) #else # define HEEV F77_FUNC(zheev,ZHEEV) # define SYEV F77_FUNC(dsyev,DSYEV) #endif extern void HEEV(char *, char *, int *, scalar_complex *, int *, real *, scalar_complex *, int *, real *, int *); extern void SYEV(char *, char *, int *, real *, int *, real *, real *, int *, int *); /* compute the 3 real eigenvalues of the matrix V */ void maxwell_sym_matrix_eigs(real eigs[3], const symmetric_matrix *V) { int n = 3, nw = 9, info; #if defined(WITH_HERMITIAN_EPSILON) scalar_complex Vm[3][3], W[9]; real W2[9]; CASSIGN_SCALAR(Vm[0][0], V->m00, 0); CASSIGN_SCALAR(Vm[1][1], V->m11, 0); CASSIGN_SCALAR(Vm[2][2], V->m22, 0); Vm[0][1] = V->m01; CASSIGN_CONJ(Vm[1][0], V->m01); Vm[0][2] = V->m02; CASSIGN_CONJ(Vm[2][0], V->m02); Vm[1][2] = V->m12; CASSIGN_CONJ(Vm[2][1], V->m12); HEEV("V", "U", &n, &Vm[0][0], &n, eigs, W, &nw, W2, &info); #else real Vm[3][3], W[9]; Vm[0][0] = V->m00; Vm[1][1] = V->m11; Vm[2][2] = V->m22; Vm[0][1] = Vm[1][0] = V->m01; Vm[0][2] = Vm[2][0] = V->m02; Vm[1][2] = Vm[2][1] = V->m12; SYEV("V", "U", &n, &Vm[0][0], &n, eigs, W, &nw, &info); #endif CHECK(info >= 0, "invalid argument in heev"); CHECK(info <= 0, "failure to converge in heev"); } /* Set Vinv = inverse of V, where both V and Vinv are real-symmetric (or possibly complex-Hermitian) matrices. */ void maxwell_sym_matrix_invert(symmetric_matrix *Vinv, const symmetric_matrix *V) { real m00 = V->m00, m11 = V->m11, m22 = V->m22; #if defined(WITH_HERMITIAN_EPSILON) scalar_complex m01 = V->m01, m02 = V->m02, m12 = V->m12; if (m01.re == 0.0 && m01.im == 0.0 && m02.re == 0.0 && m02.im == 0.0 && m12.re == 0.0 && m12.im == 0.0) { /* optimize common case of a diagonal matrix: */ Vinv->m00 = 1.0 / m00; Vinv->m11 = 1.0 / m11; Vinv->m22 = 1.0 / m22; CASSIGN_ZERO(Vinv->m01); CASSIGN_ZERO(Vinv->m02); CASSIGN_ZERO(Vinv->m12); } else { double detinv; /* compute the determinant: */ detinv = m00*m11*m22 - m11*CSCALAR_NORMSQR(m02) - CSCALAR_NORMSQR(m01)*m22 - CSCALAR_NORMSQR(m12)*m00 + 2.0 * ((m01.re * m12.re - m01.im * m12.im) * m02.re + (m01.re * m12.im + m01.im * m12.re) * m02.im); CHECK(detinv != 0.0, "singular 3x3 matrix"); detinv = 1.0/detinv; Vinv->m00 = detinv * (m11*m22 - CSCALAR_NORMSQR(m12)); Vinv->m11 = detinv * (m00*m22 - CSCALAR_NORMSQR(m02)); Vinv->m22 = detinv * (m11*m00 - CSCALAR_NORMSQR(m01)); CASSIGN_SCALAR(Vinv->m02, detinv * (m01.re*m12.re-m01.im*m12.im - m11*m02.re), -detinv*(-m01.re*m12.im-m01.im*m12.re + m11*m02.im)); CASSIGN_SCALAR(Vinv->m01, detinv * (m12.re*m02.re+m12.im*m02.im - m22*m01.re), -detinv * (m12.im*m02.re-m12.re*m02.im + m22*m01.im)); CASSIGN_SCALAR(Vinv->m12, detinv * (m01.re*m02.re+m01.im*m02.im - m00*m12.re), -detinv * (m01.im*m02.re-m01.re*m02.im + m00*m12.im)); } #else /* real matrix */ real m01 = V->m01, m02 = V->m02, m12 = V->m12; if (m01 == 0.0 && m02 == 0.0 && m12 == 0.0) { /* optimize common case of a diagonal matrix: */ Vinv->m00 = 1.0 / m00; Vinv->m11 = 1.0 / m11; Vinv->m22 = 1.0 / m22; Vinv->m01 = Vinv->m02 = Vinv->m12 = 0.0; } else { double detinv; /* compute the determinant: */ detinv = m00*m11*m22 - m02*m11*m02 + 2.0 * m01*m12*m02 - m01*m01*m22 - m12*m12*m00; CHECK(detinv != 0.0, "singular 3x3 matrix"); detinv = 1.0/detinv; Vinv->m00 = detinv * (m11*m22 - m12*m12); Vinv->m11 = detinv * (m00*m22 - m02*m02); Vinv->m22 = detinv * (m11*m00 - m01*m01); Vinv->m02 = detinv * (m01*m12 - m11*m02); Vinv->m01 = detinv * (m12*m02 - m01*m22); Vinv->m12 = detinv * (m01*m02 - m00*m12); } #endif /* real matrix */ } /* Returns whether or not V is positive-definite. */ int maxwell_sym_matrix_positive_definite(symmetric_matrix *V) { real det2, det3; real m00 = V->m00, m11 = V->m11, m22 = V->m22; #if defined(WITH_HERMITIAN_EPSILON) scalar_complex m01 = V->m01, m02 = V->m02, m12 = V->m12; det2 = m00*m11 - CSCALAR_NORMSQR(m01); det3 = det2*m22 - m11*CSCALAR_NORMSQR(m02) - CSCALAR_NORMSQR(m12)*m00 + 2.0 * ((m01.re * m12.re - m01.im * m12.im) * m02.re + (m01.re * m12.im + m01.im * m12.re) * m02.im); #else /* real matrix */ real m01 = V->m01, m02 = V->m02, m12 = V->m12; det2 = m00*m11 - m01*m01; det3 = det2*m22 - m02*m11*m02 + 2.0 * m01*m12*m02 - m12*m12*m00; #endif /* real matrix */ return (m00 > 0.0 && det2 > 0.0 && det3 > 0.0); } #define EQ(x1,x2) (fabs((x1) - (x2)) < tol) static int sym_matrix_eq(symmetric_matrix V1, symmetric_matrix V2, double tol) { if (!EQ(V1.m00,V2.m00) || !EQ(V1.m11,V2.m11) || !EQ(V1.m22,V2.m22)) return 0; #if defined(WITH_HERMITIAN_EPSILON) return(EQ(V1.m01.re,V2.m01.re) && EQ(V1.m01.im,V2.m01.im) && EQ(V1.m02.re,V2.m02.re) && EQ(V1.m02.im,V2.m02.im) && EQ(V1.m12.re,V2.m12.re) && EQ(V1.m12.im,V2.m12.im)); #else return(EQ(V1.m01,V2.m01) && EQ(V1.m02,V2.m02) && EQ(V1.m12,V2.m12)); #endif } /* rotate A by a unitary (real) rotation matrix R: RAR = transpose(R) * A * R */ void maxwell_sym_matrix_rotate(symmetric_matrix *RAR, const symmetric_matrix *A_, const double R[3][3]) { int i,j; double A[3][3], AR[3][3]; A[0][0] = A_->m00; A[1][1] = A_->m11; A[2][2] = A_->m22; A[0][1] = A[1][0] = ESCALAR_RE(A_->m01); A[0][2] = A[2][0] = ESCALAR_RE(A_->m02); A[1][2] = A[2][1] = ESCALAR_RE(A_->m12); for (i = 0; i < 3; ++i) for (j = 0; j < 3; ++j) AR[i][j] = A[i][0]*R[0][j] + A[i][1]*R[1][j] + A[i][2]*R[2][j]; for (i = 0; i < 3; ++i) for (j = i; j < 3; ++j) A[i][j] = R[0][i]*AR[0][j] + R[1][i]*AR[1][j] + R[2][i]*AR[2][j]; RAR->m00 = A[0][0]; RAR->m11 = A[1][1]; RAR->m22 = A[2][2]; ESCALAR_RE(RAR->m01) = A[0][1]; ESCALAR_RE(RAR->m02) = A[0][2]; ESCALAR_RE(RAR->m12) = A[1][2]; #if defined(WITH_HERMITIAN_EPSILON) A[0][0] = A[1][1] = A[2][2] = 0; A[1][0] = -(A[0][1] = ESCALAR_IM(A_->m01)); A[2][0] = -(A[0][2] = ESCALAR_IM(A_->m02)); A[2][1] = -(A[1][2] = ESCALAR_IM(A_->m12)); for (i = 0; i < 3; ++i) for (j = 0; j < 3; ++j) AR[i][j] = A[i][0]*R[0][j] + A[i][1]*R[1][j] + A[i][2]*R[2][j]; for (i = 0; i < 3; ++i) for (j = i; j < 3; ++j) A[i][j] = R[0][i]*AR[0][j] + R[1][i]*AR[1][j] + R[2][i]*AR[2][j]; ESCALAR_IM(RAR->m01) = A[0][1]; ESCALAR_IM(RAR->m02) = A[0][2]; ESCALAR_IM(RAR->m12) = A[1][2]; #endif } /**************************************************************************/ int check_maxwell_dielectric(maxwell_data *d, int negative_epsilon_okp) { int i, require_2d; require_2d = d->nz == 1 && (d->parity & (EVEN_Z_PARITY | ODD_Z_PARITY)); for (i = 0; i < d->fft_output_size; ++i) { if (!negative_epsilon_okp && !maxwell_sym_matrix_positive_definite(d->eps_inv + i)) return 1; if (require_2d) { #if defined(WITH_HERMITIAN_EPSILON) if (d->eps_inv[i].m02.re != 0.0 || d->eps_inv[i].m02.im != 0.0 || d->eps_inv[i].m12.re != 0.0 || d->eps_inv[i].m12.im != 0.0) return 2; #else /* real matrix */ if (d->eps_inv[i].m02 != 0.0 || d->eps_inv[i].m12 != 0.0) return 2; #endif /* real matrix */ } } return 0; } /**************************************************************************/ #define K_PI 3.141592653589793238462643383279502884197 #define SMALL 1.0e-6 #define MAX2(a,b) ((a) > (b) ? (a) : (b)) #define MIN2(a,b) ((a) < (b) ? (a) : (b)) #define MAX_MOMENT_MESH NQUAD /* max # of moment-mesh vectors */ #define MOMENT_MESH_R 0.5 /* A function to set up the mesh given the grid dimensions, mesh size, and lattice/reciprocal vectors. (Any mesh sizes < 1 are taken to be 1.) The returned values are: mesh_center: the center of the mesh, relative to the integer mesh coordinates; e.g. the mesh_center for a 3x3x3 mesh is the point (1,1,1). mesh_prod: the product of the mesh sizes. moment_mesh: an array of size_moment_mesh vectors, in lattice coordinates, of a "spherically-symmetric" mesh of points centered on the origin, designed to be used for averaging the first moment of epsilon at a grid point (for finding the local surface normal). moment_mesh_weights: an array of size_moment_mesh weights to multiply the integrand values by. */ static void get_mesh(int nx, int ny, int nz, const int mesh_size[3], real R[3][3], real G[3][3], real mesh_center[3], int *mesh_prod, real moment_mesh[MAX_MOMENT_MESH][3], real moment_mesh_weights[MAX_MOMENT_MESH], int *size_moment_mesh) { int i,j; real min_diam = 1e20; real mesh_total[3] = { 0, 0, 0 }; int rank = nz > 1 ? 3 : (ny > 1 ? 2 : 1); real weight_sum = 0.0; *mesh_prod = 1; for (i = 0; i < 3; ++i) { int ms = MAX2(mesh_size[i], 1); mesh_center[i] = (ms - 1) * 0.5; *mesh_prod *= ms; } *size_moment_mesh = num_sphere_quad[rank-1]; for (i = 0; i < num_sphere_quad[rank-1]; ++i) { for (j = 0; j < 3; ++j) moment_mesh[i][j] = sphere_quad[rank-1][i][j] * MOMENT_MESH_R; moment_mesh_weights[i] = sphere_quad[rank-1][i][3]; } CHECK(*size_moment_mesh <= MAX_MOMENT_MESH, "yikes, moment mesh too big"); for (i = 0; i < *size_moment_mesh; ++i) weight_sum += moment_mesh_weights[i]; CHECK(fabs(weight_sum - 1.0) < SMALL, "bug, incorrect moment weights"); /* scale the moment-mesh vectors so that the sphere has a diameter of 2*MOMENT_MESH_R times the diameter of the smallest grid direction: */ /* first, find the minimum distance between grid points along the lattice directions (should we use the maximum instead?): */ for (i = 0; i < rank; ++i) { real ri = R[i][0] * R[i][0] + R[i][1] * R[i][1] + R[i][2] * R[i][2]; ri = sqrt(ri) / (i == 0 ? nx : (i == 1 ? ny : nz)); min_diam = MIN2(min_diam, ri); } /* scale moment_mesh by this diameter: */ for (i = 0; i < *size_moment_mesh; ++i) { real len = 0; for (j = 0; j < 3; ++j) { moment_mesh[i][j] *= min_diam; len += moment_mesh[i][j] * moment_mesh[i][j]; mesh_total[j] += moment_mesh[i][j]; } CHECK(fabs(len - min_diam*min_diam*(MOMENT_MESH_R*MOMENT_MESH_R)) < SMALL, "bug in get_mesh: moment_mesh vector is wrong length"); } CHECK(fabs(mesh_total[0]) + fabs(mesh_total[1]) + fabs(mesh_total[2]) < SMALL, "bug in get_mesh: moment_mesh does not average to zero"); /* Now, convert the moment_mesh vectors to lattice/grid coordinates; to do this, we multiply by the G matrix (inverse of R transposed) */ for (i = 0; i < *size_moment_mesh; ++i) { real v[3]; for (j = 0; j < 3; ++j) /* make a copy of moment_mesh[i] */ v[j] = moment_mesh[i][j]; for (j = 0; j < 3; ++j) moment_mesh[i][j] = G[j][0]*v[0] + G[j][1]*v[1] + G[j][2]*v[2]; } } /**************************************************************************/ /* The following function initializes the dielectric tensor md->eps_inv, using the dielectric function epsilon(&eps, &eps_inv, r, epsilon_data). epsilon is averaged over a rectangular mesh spanning the space between grid points; the size of the mesh is given by mesh_size. R[0..2] are the spatial lattice vectors, and are used to convert the discretization grid into spatial coordinates (with the origin at the (0,0,0) grid element. In most places, the dielectric tensor is equal to eps_inv, but at dielectric interfaces it varies depending upon the polarization of the field (for faster convergence). In particular, it depends upon the direction of the field relative to the surface normal vector, so we must compute the latter. The surface normal is approximated by the "dipole moment" of the dielectric function over a spherical mesh. Implementation note: md->eps_inv is chosen to have dimensions matching the output of the FFT. Thus, its dimensions depend upon whether we are doing a real or complex and serial or parallel FFT. */ void set_maxwell_dielectric(maxwell_data *md, const int mesh_size[3], real R[3][3], real G[3][3], maxwell_dielectric_function epsilon, maxwell_dielectric_mean_function mepsilon, void *epsilon_data) { real s1, s2, s3, m1, m2, m3; /* grid/mesh steps */ real mesh_center[3]; real moment_mesh[MAX_MOMENT_MESH][3]; real moment_mesh_weights[MAX_MOMENT_MESH]; real eps_inv_total = 0.0; int i, j, k; int mesh_prod; real mesh_prod_inv; int size_moment_mesh = 0; int n1, n2, n3; #ifdef HAVE_MPI int local_n2, local_y_start, local_n3; #endif #ifndef SCALAR_COMPLEX int n_other, n_last, rank; #endif n1 = md->nx; n2 = md->ny; n3 = md->nz; get_mesh(n1, n2, n3, mesh_size, R, G, mesh_center, &mesh_prod, moment_mesh, moment_mesh_weights, &size_moment_mesh); mesh_prod_inv = 1.0 / mesh_prod; s1 = 1.0 / n1; s2 = 1.0 / n2; s3 = 1.0 / n3; m1 = s1 / MAX2(1, mesh_size[0]); m2 = s2 / MAX2(1, mesh_size[1]); m3 = s3 / MAX2(1, mesh_size[2]); /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and eps_index describing the corresponding index in the array md->eps_inv[]. */ #ifdef SCALAR_COMPLEX # ifndef HAVE_MPI for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { # define i2 i # define j2 j # define k2 k int eps_index = ((i * n2 + j) * n3 + k); # else /* HAVE_MPI */ local_n2 = md->local_ny; local_y_start = md->local_y_start; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int eps_index = ((j * n1 + i) * n3 + k); # endif /* HAVE_MPI */ #else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI (void) k; /* unused */ n_other = md->other_dims; n_last = md->last_dim_size / 2; rank = (n3 == 1) ? (n2 == 1 ? 1 : 2) : 3; for (i = 0; i < n_other; ++i) for (j = 0; j < n_last; ++j) { int eps_index = i * n_last + j; int i2, j2, k2; switch (rank) { case 2: i2 = i; j2 = j; k2 = 0; break; case 3: i2 = i / n2; j2 = i % n2; k2 = j; break; default: i2 = j; j2 = k2 = 0; break; } # else /* HAVE_MPI */ local_n2 = md->local_ny; local_y_start = md->local_y_start; /* For a real->complex transform, the last dimension is cut in half. For a 2d transform, this is taken into account in local_ny already, but for a 3d transform we must compute the new n3: */ if (n3 > 1) local_n3 = md->last_dim_size / 2; else local_n3 = 1; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < local_n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int eps_index = ((j * n1 + i) * local_n3 + k); # endif /* HAVE_MPI */ #endif /* not SCALAR_COMPLEX */ { int mi, mj, mk; #ifdef WITH_HERMITIAN_EPSILON symmetric_matrix eps_mean, eps_inv_mean, eps_mean_inv; #else symmetric_matrix eps_mean, eps_inv_mean, eps_mean_inv; #endif real norm_len; real norm0, norm1, norm2; short means_different_p, diag_eps_p; { real r[3], normal[3]; r[0] = i2 * s1; r[1] = j2 * s2; r[2] = k2 * s3; if (mepsilon && mepsilon(&eps_mean, &eps_inv_mean, normal, s1, s2, s3, mesh_prod_inv, r, epsilon_data)) { #ifdef KOTTKE /* mepsilon did new anisotropic smoothing w/Kottke algorithm */ maxwell_sym_matrix_invert(md->eps_inv + eps_index, &eps_mean); goto got_eps_inv; #endif norm0 = R[0][0] * normal[0] + R[1][0] * normal[1] + R[2][0] * normal[2]; norm1 = R[0][1] * normal[0] + R[1][1] * normal[1] + R[2][1] * normal[2]; norm2 = R[0][2] * normal[0] + R[1][2] * normal[1] + R[2][2] * normal[2]; means_different_p = 1; diag_eps_p = DIAG_SYMMETRIC_MATRIX(eps_mean); maxwell_sym_matrix_invert(&eps_mean_inv, &eps_mean); #if !defined(SCALAR_COMPLEX) && 0 /* check inversion symmetry */ { symmetric_matrix eps_mean2, eps_inv_mean2; real normal2[3], r2[3], nc[3]; r2[0] = n1 == 0 ? r[0] : 1.0 - r[0]; r2[1] = n2 == 0 ? r[1] : 1.0 - r[1]; r2[2] = n3 == 0 ? r[2] : 1.0 - r[2]; CHECK(mepsilon(&eps_mean2, &eps_inv_mean2, normal2, s1, s2, s3, mesh_prod_inv, r2, epsilon_data), "mepsilon symmetry is broken"); CHECK(sym_matrix_eq(eps_mean,eps_mean2,1e-10) && sym_matrix_eq(eps_inv_mean,eps_inv_mean2,1e-10), "inversion symmetry is broken"); nc[0] = normal[1]*normal2[2] - normal[2]*normal2[1]; nc[1] = normal[2]*normal2[0] - normal[0]*normal2[2]; nc[2] = normal[0]*normal2[1] - normal[1]*normal2[0]; CHECK(sqrt(nc[0]*nc[0]+nc[1]*nc[1]+nc[2]*nc[2])<1e-6, "normal-vector symmetry is broken"); } #endif goto got_mean; } } eps_mean.m00 = eps_mean.m11 = eps_mean.m22 = eps_inv_mean.m00 = eps_inv_mean.m11 = eps_inv_mean.m22 = 0.0; ASSIGN_ESCALAR(eps_mean.m01, 0,0); ASSIGN_ESCALAR(eps_mean.m02, 0,0); ASSIGN_ESCALAR(eps_mean.m12, 0,0); ASSIGN_ESCALAR(eps_inv_mean.m01, 0,0); ASSIGN_ESCALAR(eps_inv_mean.m02, 0,0); ASSIGN_ESCALAR(eps_inv_mean.m12, 0,0); for (mi = 0; mi < mesh_size[0]; ++mi) for (mj = 0; mj < mesh_size[1]; ++mj) for (mk = 0; mk < mesh_size[2]; ++mk) { real r[3]; symmetric_matrix eps, eps_inv; r[0] = i2 * s1 + (mi - mesh_center[0]) * m1; r[1] = j2 * s2 + (mj - mesh_center[1]) * m2; r[2] = k2 * s3 + (mk - mesh_center[2]) * m3; epsilon(&eps, &eps_inv, r, epsilon_data); eps_mean.m00 += eps.m00; eps_mean.m11 += eps.m11; eps_mean.m22 += eps.m22; eps_inv_mean.m00 += eps_inv.m00; eps_inv_mean.m11 += eps_inv.m11; eps_inv_mean.m22 += eps_inv.m22; #ifdef WITH_HERMITIAN_EPSILON CACCUMULATE_SUM(eps_mean.m01, eps.m01); CACCUMULATE_SUM(eps_mean.m02, eps.m02); CACCUMULATE_SUM(eps_mean.m12, eps.m12); CACCUMULATE_SUM(eps_inv_mean.m01, eps_inv.m01); CACCUMULATE_SUM(eps_inv_mean.m02, eps_inv.m02); CACCUMULATE_SUM(eps_inv_mean.m12, eps_inv.m12); #else eps_mean.m01 += eps.m01; eps_mean.m02 += eps.m02; eps_mean.m12 += eps.m12; eps_inv_mean.m01 += eps_inv.m01; eps_inv_mean.m02 += eps_inv.m02; eps_inv_mean.m12 += eps_inv.m12; #endif } diag_eps_p = DIAG_SYMMETRIC_MATRIX(eps_mean); if (diag_eps_p) { /* handle the common case of diagonal matrices: */ eps_mean_inv.m00 = mesh_prod / eps_mean.m00; eps_mean_inv.m11 = mesh_prod / eps_mean.m11; eps_mean_inv.m22 = mesh_prod / eps_mean.m22; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_ZERO(eps_mean_inv.m01); CASSIGN_ZERO(eps_mean_inv.m02); CASSIGN_ZERO(eps_mean_inv.m12); #else eps_mean_inv.m01 = eps_mean_inv.m02 = eps_mean_inv.m12 = 0.0; #endif eps_inv_mean.m00 *= mesh_prod_inv; eps_inv_mean.m11 *= mesh_prod_inv; eps_inv_mean.m22 *= mesh_prod_inv; means_different_p = fabs(eps_mean_inv.m00 - eps_inv_mean.m00) > SMALL || fabs(eps_mean_inv.m11 - eps_inv_mean.m11) > SMALL || fabs(eps_mean_inv.m22 - eps_inv_mean.m22) > SMALL; } else { eps_inv_mean.m00 *= mesh_prod_inv; eps_inv_mean.m11 *= mesh_prod_inv; eps_inv_mean.m22 *= mesh_prod_inv; eps_mean.m00 *= mesh_prod_inv; eps_mean.m11 *= mesh_prod_inv; eps_mean.m22 *= mesh_prod_inv; #ifdef WITH_HERMITIAN_EPSILON eps_mean.m01.re *= mesh_prod_inv; eps_mean.m01.im *= mesh_prod_inv; eps_mean.m02.re *= mesh_prod_inv; eps_mean.m02.im *= mesh_prod_inv; eps_mean.m12.re *= mesh_prod_inv; eps_mean.m12.im *= mesh_prod_inv; eps_inv_mean.m01.re *= mesh_prod_inv; eps_inv_mean.m01.im *= mesh_prod_inv; eps_inv_mean.m02.re *= mesh_prod_inv; eps_inv_mean.m02.im *= mesh_prod_inv; eps_inv_mean.m12.re *= mesh_prod_inv; eps_inv_mean.m12.im *= mesh_prod_inv; #else eps_mean.m01 *= mesh_prod_inv; eps_mean.m02 *= mesh_prod_inv; eps_mean.m12 *= mesh_prod_inv; eps_inv_mean.m01 *= mesh_prod_inv; eps_inv_mean.m02 *= mesh_prod_inv; eps_inv_mean.m12 *= mesh_prod_inv; #endif maxwell_sym_matrix_invert(&eps_mean_inv, &eps_mean); means_different_p = fabs(eps_mean_inv.m00 - eps_inv_mean.m00) > SMALL || fabs(eps_mean_inv.m11 - eps_inv_mean.m11) > SMALL || fabs(eps_mean_inv.m22 - eps_inv_mean.m22) > SMALL; #ifdef WITH_HERMITIAN_EPSILON means_different_p = means_different_p || fabs(eps_mean_inv.m01.re - eps_inv_mean.m01.re) > SMALL || fabs(eps_mean_inv.m02.re - eps_inv_mean.m02.re) > SMALL || fabs(eps_mean_inv.m12.re - eps_inv_mean.m12.re) > SMALL || fabs(eps_mean_inv.m01.im - eps_inv_mean.m01.im) > SMALL || fabs(eps_mean_inv.m02.im - eps_inv_mean.m02.im) > SMALL || fabs(eps_mean_inv.m12.im - eps_inv_mean.m12.im) > SMALL; #else means_different_p = means_different_p || fabs(eps_mean_inv.m01 - eps_inv_mean.m01) > SMALL || fabs(eps_mean_inv.m02 - eps_inv_mean.m02) > SMALL || fabs(eps_mean_inv.m12 - eps_inv_mean.m12) > SMALL; #endif } /* if the two averaging methods yielded different results, which usually happens if epsilon is not constant, then we need to find the normal vector to the dielectric interface: */ if (means_different_p) { real moment0 = 0, moment1 = 0, moment2 = 0; for (mi = 0; mi < size_moment_mesh; ++mi) { real r[3], eps_trace; symmetric_matrix eps, eps_inv; r[0] = i2 * s1 + moment_mesh[mi][0]; r[1] = j2 * s2 + moment_mesh[mi][1]; r[2] = k2 * s3 + moment_mesh[mi][2]; epsilon(&eps, &eps_inv, r, epsilon_data); eps_trace = eps.m00 + eps.m11 + eps.m22; eps_trace *= moment_mesh_weights[mi]; moment0 += eps_trace * moment_mesh[mi][0]; moment1 += eps_trace * moment_mesh[mi][1]; moment2 += eps_trace * moment_mesh[mi][2]; } /* need to convert moment from lattice to cartesian coords: */ norm0 = R[0][0]*moment0 + R[1][0]*moment1 + R[2][0]*moment2; norm1 = R[0][1]*moment0 + R[1][1]*moment1 + R[2][1]*moment2; norm2 = R[0][2]*moment0 + R[1][2]*moment1 + R[2][2]*moment2; got_mean: norm_len = sqrt(norm0*norm0 + norm1*norm1 + norm2*norm2); } if (means_different_p && norm_len > SMALL) { real x0, x1, x2; norm_len = 1.0/norm_len; norm0 *= norm_len; norm1 *= norm_len; norm2 *= norm_len; /* Compute the effective inverse dielectric tensor. We define this as: 1/2 ( {eps_inv_mean, P} + {eps_mean_inv, 1-P} ) where P is the projection matrix onto the normal direction (P = norm ^ norm), and {a,b} is the anti-commutator ab+ba. = 1/2 {eps_inv_mean - eps_mean_inv, P} + eps_mean_inv = 1/2 (n_i conj(x_j) + x_i n_j) + (eps_mean_inv)_ij where n_k is the kth component of the normal vector and x_i = (eps_inv_mean - eps_mean_inv)_ik n_k Note the implied summations (Einstein notation). Note that the resulting matrix is symmetric, and we get just eps_inv_mean if eps_inv_mean == eps_mean_inv, as desired. Note that P is idempotent, so for scalar epsilon this is just eps_inv_mean * P + eps_mean_inv * (1-P) = (1/eps_inv_mean * P + eps_mean * (1-P)) ^ (-1), which corresponds to the expression in the Meade paper. */ x0 = (eps_inv_mean.m00 - eps_mean_inv.m00) * norm0; x1 = (eps_inv_mean.m11 - eps_mean_inv.m11) * norm1; x2 = (eps_inv_mean.m22 - eps_mean_inv.m22) * norm2; if (diag_eps_p) { #ifdef WITH_HERMITIAN_EPSILON md->eps_inv[eps_index].m01.re = 0.5*(x0*norm1 + x1*norm0); md->eps_inv[eps_index].m01.im = 0.0; md->eps_inv[eps_index].m02.re = 0.5*(x0*norm2 + x2*norm0); md->eps_inv[eps_index].m02.im = 0.0; md->eps_inv[eps_index].m12.re = 0.5*(x1*norm2 + x2*norm1); md->eps_inv[eps_index].m12.im = 0.0; #else md->eps_inv[eps_index].m01 = 0.5*(x0*norm1 + x1*norm0); md->eps_inv[eps_index].m02 = 0.5*(x0*norm2 + x2*norm0); md->eps_inv[eps_index].m12 = 0.5*(x1*norm2 + x2*norm1); #endif } else { #ifdef WITH_HERMITIAN_EPSILON real x0i, x1i, x2i; x0 += ((eps_inv_mean.m01.re - eps_mean_inv.m01.re)*norm1 + (eps_inv_mean.m02.re - eps_mean_inv.m02.re)*norm2); x1 += ((eps_inv_mean.m01.re - eps_mean_inv.m01.re)*norm0 + (eps_inv_mean.m12.re - eps_mean_inv.m12.re)*norm2); x2 += ((eps_inv_mean.m02.re - eps_mean_inv.m02.re)*norm0 + (eps_inv_mean.m12.re - eps_mean_inv.m12.re)*norm1); x0i = ((eps_inv_mean.m01.im - eps_mean_inv.m01.im)*norm1 + (eps_inv_mean.m02.im - eps_mean_inv.m02.im)*norm2); x1i = (-(eps_inv_mean.m01.im - eps_mean_inv.m01.im)*norm0+ (eps_inv_mean.m12.im - eps_mean_inv.m12.im)*norm2); x2i = -((eps_inv_mean.m02.im - eps_mean_inv.m02.im)*norm0 + (eps_inv_mean.m12.im - eps_mean_inv.m12.im)*norm1); md->eps_inv[eps_index].m01.re = (0.5*(x0*norm1 + x1*norm0) + eps_mean_inv.m01.re); md->eps_inv[eps_index].m02.re = (0.5*(x0*norm2 + x2*norm0) + eps_mean_inv.m02.re); md->eps_inv[eps_index].m12.re = (0.5*(x1*norm2 + x2*norm1) + eps_mean_inv.m12.re); md->eps_inv[eps_index].m01.im = (0.5*(x0i*norm1-x1i*norm0) + eps_mean_inv.m01.im); md->eps_inv[eps_index].m02.im = (0.5*(x0i*norm2-x2i*norm0) + eps_mean_inv.m02.im); md->eps_inv[eps_index].m12.im = (0.5*(x1i*norm2-x2i*norm1) + eps_mean_inv.m12.im); #else x0 += ((eps_inv_mean.m01 - eps_mean_inv.m01) * norm1 + (eps_inv_mean.m02 - eps_mean_inv.m02) * norm2); x1 += ((eps_inv_mean.m01 - eps_mean_inv.m01) * norm0 + (eps_inv_mean.m12 - eps_mean_inv.m12) * norm2); x2 += ((eps_inv_mean.m02 - eps_mean_inv.m02) * norm0 + (eps_inv_mean.m12 - eps_mean_inv.m12) * norm1); md->eps_inv[eps_index].m01 = (0.5*(x0*norm1 + x1*norm0) + eps_mean_inv.m01); md->eps_inv[eps_index].m02 = (0.5*(x0*norm2 + x2*norm0) + eps_mean_inv.m02); md->eps_inv[eps_index].m12 = (0.5*(x1*norm2 + x2*norm1) + eps_mean_inv.m12); #endif } md->eps_inv[eps_index].m00 = x0*norm0 + eps_mean_inv.m00; md->eps_inv[eps_index].m11 = x1*norm1 + eps_mean_inv.m11; md->eps_inv[eps_index].m22 = x2*norm2 + eps_mean_inv.m22; } else { /* undetermined normal vector and/or constant eps */ md->eps_inv[eps_index] = eps_mean_inv; } got_eps_inv: eps_inv_total += (md->eps_inv[eps_index].m00 + md->eps_inv[eps_index].m11 + md->eps_inv[eps_index].m22); }} /* end of loop body */ mpi_allreduce_1(&eps_inv_total, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); n1 = md->fft_output_size; mpi_allreduce_1(&n1, int, MPI_INT, MPI_SUM, MPI_COMM_WORLD); md->eps_inv_mean = eps_inv_total / (3 * n1); } mpb-1.5/src/maxwell/imaxwell.h0000644000175400001440000000462512315341423013316 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* internal header for maxwell.h, depends on config.h */ #ifndef IMAXWELL_H #define IMAXWELL_H #include "config.h" #include "maxwell.h" #if defined(HAVE_LIBFFTW3) || defined(HAVE_LIBFFTW3F) || defined(HAVE_LIBFFTW3L) # include # ifdef HAVE_MPI # include # endif # define HAVE_FFTW3 1 #elif defined(HAVE_LIBFFTW) # include # include # ifdef HAVE_MPI # include # include # endif #elif defined(HAVE_LIBDFFTW) # include # include # ifdef HAVE_MPI # include # include # endif #elif defined(HAVE_LIBSFFTW) # include # include # ifdef HAVE_MPI # include # include # endif #elif defined(HAVE_LIBXFFTW) # include # include # ifdef HAVE_MPI # include # include # endif #endif #if defined(HAVE_LIBFFTW) || defined(HAVE_LIBDFFTW) || defined(HAVE_LIBSFFTW) || defined(HAVE_LIBXFFTW) # define HAVE_FFTW 1 #endif #include "scalar.h" #if defined(HAVE_FFTW3) # if defined(SCALAR_SINGLE_PREC) # define FFTW(x) fftwf_ ## x # elif defined(SCALAR_LONG_DOUBLE_PREC) # define FFTW(x) fftwl_ ## x # else # define FFTW(x) fftw_ ## x # endif typedef FFTW(plan) fftplan; #elif defined(HAVE_FFTW) # ifdef HAVE_MPI # ifdef SCALAR_COMPLEX typedef fftwnd_mpi_plan fftplan; # else typedef rfftwnd_mpi_plan fftplan; # endif # else # ifdef SCALAR_COMPLEX typedef fftwnd_plan fftplan; # else typedef rfftwnd_plan fftplan; # endif # endif #endif #endif /* IMAXWELL_H */ mpb-1.5/src/maxwell/maxwell.c0000644000175400001440000003301012315341423013126 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "imaxwell.h" #include "check.h" /* This file is has too many #ifdef's...blech. */ #define MIN2(a,b) ((a) < (b) ? (a) : (b)) #define MAX2(a,b) ((a) > (b) ? (a) : (b)) maxwell_data *create_maxwell_data(int nx, int ny, int nz, int *local_N, int *N_start, int *alloc_N, int num_bands, int max_fft_bands) { int n[3], rank = (nz == 1) ? (ny == 1 ? 1 : 2) : 3; maxwell_data *d = 0; int fft_data_size; n[0] = nx; n[1] = ny; n[2] = nz; #if !defined(HAVE_FFTW) && !defined(HAVE_FFTW3) # error Non-FFTW FFTs are not currently supported. #endif #if defined(HAVE_FFTW) CHECK(sizeof(fftw_real) == sizeof(real), "floating-point type is inconsistent with FFTW!"); #endif CHK_MALLOC(d, maxwell_data, 1); d->nx = nx; d->ny = ny; d->nz = nz; d->max_fft_bands = MIN2(num_bands, max_fft_bands); maxwell_set_num_bands(d, num_bands); d->current_k[0] = d->current_k[1] = d->current_k[2] = 0.0; d->parity = NO_PARITY; d->last_dim_size = d->last_dim = n[rank - 1]; /* ----------------------------------------------------- */ d->nplans = 1; #ifndef HAVE_MPI d->local_nx = nx; d->local_ny = ny; d->local_x_start = d->local_y_start = 0; *local_N = *alloc_N = nx * ny * nz; *N_start = 0; d->other_dims = *local_N / d->last_dim; d->fft_data = 0; /* initialize it here for use in specific planner? */ # if defined(HAVE_FFTW3) d->nplans = 0; /* plans will be created as needed */ # ifdef SCALAR_COMPLEX d->fft_output_size = fft_data_size = nx * ny * nz; # else d->last_dim_size = 2 * (d->last_dim / 2 + 1); d->fft_output_size = (fft_data_size = d->other_dims * d->last_dim_size)/2; # endif # elif defined(HAVE_FFTW) # ifdef SCALAR_COMPLEX d->fft_output_size = fft_data_size = nx * ny * nz; d->plans[0] = fftwnd_create_plan_specific(rank, n, FFTW_BACKWARD, FFTW_ESTIMATE | FFTW_IN_PLACE, (fftw_complex*) d->fft_data, 3 * d->num_fft_bands, (fftw_complex*) d->fft_data, 3 * d->num_fft_bands); d->iplans[0] = fftwnd_create_plan_specific(rank, n, FFTW_FORWARD, FFTW_ESTIMATE | FFTW_IN_PLACE, (fftw_complex*) d->fft_data, 3 * d->num_fft_bands, (fftw_complex*) d->fft_data, 3 * d->num_fft_bands); # else /* not SCALAR_COMPLEX */ d->last_dim_size = 2 * (d->last_dim / 2 + 1); d->fft_output_size = (fft_data_size = d->other_dims * d->last_dim_size)/2; d->plans[0] = rfftwnd_create_plan_specific(rank, n, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE | FFTW_IN_PLACE, (fftw_real*) d->fft_data, 3 * d->num_fft_bands, (fftw_real*) d->fft_data, 3 * d->num_fft_bands); d->iplans[0] = rfftwnd_create_plan_specific(rank, n, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE | FFTW_IN_PLACE, (fftw_real*) d->fft_data, 3 * d->num_fft_bands, (fftw_real*) d->fft_data, 3 * d->num_fft_bands); # endif /* not SCALAR_COMPLEX */ # endif /* HAVE_FFTW */ #else /* HAVE_MPI */ /* ----------------------------------------------------- */ # if defined(HAVE_FFTW3) { int i; ptrdiff_t np[3], local_nx, local_ny, local_x_start, local_y_start; CHECK(rank > 1, "rank < 2 MPI computations are not supported"); d->nplans = 0; /* plans will be created as needed */ for (i = 0; i < rank; ++i) np[i] = n[i]; # ifndef SCALAR_COMPLEX d->last_dim_size = 2 * (np[rank-1] = d->last_dim / 2 + 1); # endif fft_data_size = *alloc_N = FFTW(mpi_local_size_transposed)(rank, np, MPI_COMM_WORLD, &local_nx, &local_x_start, &local_ny, &local_y_start); # ifndef SCALAR_COMPLEX fft_data_size = (*alloc_N *= 2); // convert to # of real scalars # endif d->local_nx = local_nx; d->local_x_start = local_x_start; d->local_ny = local_ny; d->local_y_start = local_y_start; d->fft_output_size = nx * d->local_ny * (rank==3 ? np[2] : nz); *local_N = d->local_nx * ny * nz; *N_start = d->local_x_start * ny * nz; d->other_dims = *local_N / d->last_dim; } # elif defined(HAVE_FFTW) CHECK(rank > 1, "rank < 2 MPI computations are not supported"); # ifdef SCALAR_COMPLEX d->iplans[0] = fftwnd_mpi_create_plan(MPI_COMM_WORLD, rank, n, FFTW_FORWARD, FFTW_ESTIMATE | FFTW_IN_PLACE); { int nt[3]; /* transposed dimensions for reverse FFT */ nt[0] = n[1]; nt[1] = n[0]; nt[2] = n[2]; d->plans[0] = fftwnd_mpi_create_plan(MPI_COMM_WORLD, rank, nt, FFTW_BACKWARD, FFTW_ESTIMATE | FFTW_IN_PLACE); } fftwnd_mpi_local_sizes(d->iplans[0], &d->local_nx, &d->local_x_start, &d->local_ny, &d->local_y_start, &fft_data_size); d->fft_output_size = nx * d->local_ny * nz; # else /* not SCALAR_COMPLEX */ CHECK(rank > 1, "rank < 2 MPI computations are not supported"); d->iplans[0] = rfftwnd_mpi_create_plan(MPI_COMM_WORLD, rank, n, FFTW_REAL_TO_COMPLEX, FFTW_ESTIMATE | FFTW_IN_PLACE); /* Unlike fftwnd_mpi, we do *not* pass transposed dimensions for the reverse transform here--we always pass the dimensions of the original real array, and rfftwnd_mpi assumes that if one transform is transposed, then the other is as well. */ d->plans[0] = rfftwnd_mpi_create_plan(MPI_COMM_WORLD, rank, n, FFTW_COMPLEX_TO_REAL, FFTW_ESTIMATE | FFTW_IN_PLACE); rfftwnd_mpi_local_sizes(d->iplans[0], &d->local_nx, &d->local_x_start, &d->local_ny, &d->local_y_start, &fft_data_size); d->last_dim_size = 2 * (d->last_dim / 2 + 1); if (rank == 2) d->fft_output_size = nx * d->local_ny * nz; else d->fft_output_size = nx * d->local_ny * (d->last_dim_size / 2); # endif /* not SCALAR_COMPLEX */ *local_N = d->local_nx * ny * nz; *N_start = d->local_x_start * ny * nz; *alloc_N = *local_N; d->other_dims = *local_N / d->last_dim; # endif /* HAVE_FFTW */ #endif /* HAVE_MPI */ /* ----------------------------------------------------- */ #ifdef HAVE_FFTW CHECK(d->plans[0] && d->iplans[0], "FFTW plan creation failed"); #endif CHK_MALLOC(d->eps_inv, symmetric_matrix, d->fft_output_size); /* A scratch output array is required because the "ordinary" arrays are not in a cartesian basis (or even a constant basis). */ fft_data_size *= d->max_fft_bands; #if defined(HAVE_FFTW3) d->fft_data = (scalar *) FFTW(malloc)(sizeof(scalar) * 3 * fft_data_size); CHECK(d->fft_data, "out of memory!"); d->fft_data2 = d->fft_data; /* works in-place */ #else CHK_MALLOC(d->fft_data, scalar, 3 * fft_data_size); d->fft_data2 = d->fft_data; /* works in-place */ #endif CHK_MALLOC(d->k_plus_G, k_data, *local_N); CHK_MALLOC(d->k_plus_G_normsqr, real, *local_N); d->eps_inv_mean = 1.0; d->local_N = *local_N; d->N_start = *N_start; d->alloc_N = *alloc_N; d->N = nx * ny * nz; return d; } void destroy_maxwell_data(maxwell_data *d) { if (d) { int i; for (i = 0; i < d->nplans; ++i) { #if defined(HAVE_FFTW3) FFTW(destroy_plan)((fftplan) (d->plans[i])); FFTW(destroy_plan)((fftplan) (d->iplans[i])); #elif defined(HAVE_FFTW) # ifdef HAVE_MPI # ifdef SCALAR_COMPLEX fftwnd_mpi_destroy_plan((fftplan) (d->plans[i])); fftwnd_mpi_destroy_plan((fftplan) (d->iplans[i])); # else /* not SCALAR_COMPLEX */ rfftwnd_mpi_destroy_plan((fftplan) (d->plans[i])); rfftwnd_mpi_destroy_plan((fftplan) (d->iplans[i])); # endif /* not SCALAR_COMPLEX */ # else /* not HAVE_MPI */ # ifdef SCALAR_COMPLEX fftwnd_destroy_plan((fftplan) (d->plans[i])); fftwnd_destroy_plan((fftplan) (d->iplans[i])); # else /* not SCALAR_COMPLEX */ rfftwnd_destroy_plan((fftplan) (d->plans[i])); rfftwnd_destroy_plan((fftplan) (d->iplans[i])); # endif /* not SCALAR_COMPLEX */ # endif /* not HAVE_MPI */ #endif /* HAVE FFTW */ } free(d->eps_inv); #if defined(HAVE_FFTW3) FFTW(free)(d->fft_data); if (d->fft_data2 != d->fft_data) FFTW(free)(d->fft_data2); #else free(d->fft_data); #endif free(d->k_plus_G); free(d->k_plus_G_normsqr); free(d); } } void maxwell_set_num_bands(maxwell_data *d, int num_bands) { d->num_bands = num_bands; d->num_fft_bands = MIN2(num_bands, d->max_fft_bands); } /* compute a = b x c */ static void compute_cross(real *a0, real *a1, real *a2, real b0, real b1, real b2, real c0, real c1, real c2) { *a0 = b1 * c2 - b2 * c1; *a1 = b2 * c0 - b0 * c2; *a2 = b0 * c1 - b1 * c0; } /* Set the current k point for the Maxwell solver. k is given in the basis of the reciprocal lattice vectors, G1, G2, and G3. */ void update_maxwell_data_k(maxwell_data *d, real k[3], real G1[3], real G2[3], real G3[3]) { int nx = d->nx, ny = d->ny, nz = d->nz; int cx = MAX2(1,d->nx/2), cy = MAX2(1,d->ny/2), cz = MAX2(1,d->nz/2); k_data *kpG = d->k_plus_G; real *kpGn2 = d->k_plus_G_normsqr; int x, y, z; real kx, ky, kz; kx = G1[0]*k[0] + G2[0]*k[1] + G3[0]*k[2]; ky = G1[1]*k[0] + G2[1]*k[1] + G3[1]*k[2]; kz = G1[2]*k[0] + G2[2]*k[1] + G3[2]*k[2]; d->zero_k = kx == 0.0 && ky == 0.0 && kz == 0.0; d->current_k[0] = kx; d->current_k[1] = ky; d->current_k[2] = kz; /* make sure current parity is still valid: */ set_maxwell_data_parity(d, d->parity); for (x = d->local_x_start; x < d->local_x_start + d->local_nx; ++x) { int kxi = (x >= cx) ? (x - nx) : x; for (y = 0; y < ny; ++y) { int kyi = (y >= cy) ? (y - ny) : y; for (z = 0; z < nz; ++z, kpG++, kpGn2++) { int kzi = (z >= cz) ? (z - nz) : z; real kpGx, kpGy, kpGz, a, b, c, leninv; /* Compute k+G (noting that G is negative because of the choice of sign in the FFTW Fourier transform): */ kpGx = kx - (G1[0]*kxi + G2[0]*kyi + G3[0]*kzi); kpGy = ky - (G1[1]*kxi + G2[1]*kyi + G3[1]*kzi); kpGz = kz - (G1[2]*kxi + G2[2]*kyi + G3[2]*kzi); a = kpGx*kpGx + kpGy*kpGy + kpGz*kpGz; kpG->kmag = sqrt(a); *kpGn2 = a; /* Now, compute the two normal vectors: */ /* (Note that we choose them so that m has odd/even parity in z/y, and n is even/odd in z/y.) */ if (a == 0) { kpG->nx = 0.0; kpG->ny = 1.0; kpG->nz = 0.0; kpG->mx = 0.0; kpG->my = 0.0; kpG->mz = 1.0; } else { if (kpGx == 0.0 && kpGy == 0.0) { /* put n in the y direction if k+G is in z: */ kpG->nx = 0.0; kpG->ny = 1.0; kpG->nz = 0.0; } else { /* otherwise, let n = z x (k+G), normalized: */ compute_cross(&a, &b, &c, 0.0, 0.0, 1.0, kpGx, kpGy, kpGz); leninv = 1.0 / sqrt(a*a + b*b + c*c); kpG->nx = a * leninv; kpG->ny = b * leninv; kpG->nz = c * leninv; } /* m = n x (k+G), normalized */ compute_cross(&a, &b, &c, kpG->nx, kpG->ny, kpG->nz, kpGx, kpGy, kpGz); leninv = 1.0 / sqrt(a*a + b*b + c*c); kpG->mx = a * leninv; kpG->my = b * leninv; kpG->mz = c * leninv; } #ifdef DEBUG #define DOT(u0,u1,u2,v0,v1,v2) ((u0)*(v0) + (u1)*(v1) + (u2)*(v2)) /* check orthogonality */ CHECK(fabs(DOT(kpGx, kpGy, kpGz, kpG->nx, kpG->ny, kpG->nz)) < 1e-6, "vectors not orthogonal!"); CHECK(fabs(DOT(kpGx, kpGy, kpGz, kpG->mx, kpG->my, kpG->mz)) < 1e-6, "vectors not orthogonal!"); CHECK(fabs(DOT(kpG->mx, kpG->my, kpG->mz, kpG->nx, kpG->ny, kpG->nz)) < 1e-6, "vectors not orthogonal!"); /* check normalization */ CHECK(fabs(DOT(kpG->nx, kpG->ny, kpG->nz, kpG->nx, kpG->ny, kpG->nz) - 1.0) < 1e-6, "vectors not unit vectors!"); CHECK(fabs(DOT(kpG->mx, kpG->my, kpG->mz, kpG->mx, kpG->my, kpG->mz) - 1.0) < 1e-6, "vectors not unit vectors!"); #endif } } } } void set_maxwell_data_parity(maxwell_data *d, int parity) { if ((parity & EVEN_Z_PARITY) && (parity & ODD_Z_PARITY)) parity &= ~(EVEN_Z_PARITY | ODD_Z_PARITY); if (d->current_k[2] != 0.0) parity &= ~(EVEN_Z_PARITY | ODD_Z_PARITY); if ((parity & EVEN_Y_PARITY) && (parity & ODD_Y_PARITY)) parity &= ~(EVEN_Y_PARITY | ODD_Y_PARITY); if (d->current_k[1] != 0.0) parity &= ~(EVEN_Y_PARITY | ODD_Y_PARITY); d->parity = parity; } maxwell_target_data *create_maxwell_target_data(maxwell_data *md, real target_frequency) { maxwell_target_data *d; CHK_MALLOC(d, maxwell_target_data, 1); d->d = md; d->target_frequency = target_frequency; return d; } void destroy_maxwell_target_data(maxwell_target_data *d) { if (d) { free(d); } } mpb-1.5/src/maxwell/Makefile.in0000644000175400001440000005736612315337034013405 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/maxwell DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmaxwell_la_LIBADD = am_libmaxwell_la_OBJECTS = libmaxwell_la-maxwell.lo \ libmaxwell_la-maxwell_constraints.lo \ libmaxwell_la-maxwell_eps.lo libmaxwell_la-maxwell_op.lo \ libmaxwell_la-maxwell_pre.lo libmaxwell_la_OBJECTS = $(am_libmaxwell_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmaxwell_la_SOURCES) DIST_SOURCES = $(libmaxwell_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libmaxwell.la EXTRA_DIST = README libmaxwell_la_SOURCES = imaxwell.h maxwell.c maxwell.h \ maxwell_constraints.c maxwell_eps.c maxwell_op.c maxwell_pre.c libmaxwell_la_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../matrices all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/maxwell/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/maxwell/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmaxwell.la: $(libmaxwell_la_OBJECTS) $(libmaxwell_la_DEPENDENCIES) $(EXTRA_libmaxwell_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmaxwell_la_OBJECTS) $(libmaxwell_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmaxwell_la-maxwell.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmaxwell_la-maxwell_constraints.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmaxwell_la-maxwell_eps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmaxwell_la-maxwell_op.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmaxwell_la-maxwell_pre.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libmaxwell_la-maxwell.lo: maxwell.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmaxwell_la-maxwell.lo -MD -MP -MF $(DEPDIR)/libmaxwell_la-maxwell.Tpo -c -o libmaxwell_la-maxwell.lo `test -f 'maxwell.c' || echo '$(srcdir)/'`maxwell.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmaxwell_la-maxwell.Tpo $(DEPDIR)/libmaxwell_la-maxwell.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maxwell.c' object='libmaxwell_la-maxwell.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmaxwell_la-maxwell.lo `test -f 'maxwell.c' || echo '$(srcdir)/'`maxwell.c libmaxwell_la-maxwell_constraints.lo: maxwell_constraints.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmaxwell_la-maxwell_constraints.lo -MD -MP -MF $(DEPDIR)/libmaxwell_la-maxwell_constraints.Tpo -c -o libmaxwell_la-maxwell_constraints.lo `test -f 'maxwell_constraints.c' || echo '$(srcdir)/'`maxwell_constraints.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmaxwell_la-maxwell_constraints.Tpo $(DEPDIR)/libmaxwell_la-maxwell_constraints.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maxwell_constraints.c' object='libmaxwell_la-maxwell_constraints.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmaxwell_la-maxwell_constraints.lo `test -f 'maxwell_constraints.c' || echo '$(srcdir)/'`maxwell_constraints.c libmaxwell_la-maxwell_eps.lo: maxwell_eps.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmaxwell_la-maxwell_eps.lo -MD -MP -MF $(DEPDIR)/libmaxwell_la-maxwell_eps.Tpo -c -o libmaxwell_la-maxwell_eps.lo `test -f 'maxwell_eps.c' || echo '$(srcdir)/'`maxwell_eps.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmaxwell_la-maxwell_eps.Tpo $(DEPDIR)/libmaxwell_la-maxwell_eps.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maxwell_eps.c' object='libmaxwell_la-maxwell_eps.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmaxwell_la-maxwell_eps.lo `test -f 'maxwell_eps.c' || echo '$(srcdir)/'`maxwell_eps.c libmaxwell_la-maxwell_op.lo: maxwell_op.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmaxwell_la-maxwell_op.lo -MD -MP -MF $(DEPDIR)/libmaxwell_la-maxwell_op.Tpo -c -o libmaxwell_la-maxwell_op.lo `test -f 'maxwell_op.c' || echo '$(srcdir)/'`maxwell_op.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmaxwell_la-maxwell_op.Tpo $(DEPDIR)/libmaxwell_la-maxwell_op.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maxwell_op.c' object='libmaxwell_la-maxwell_op.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmaxwell_la-maxwell_op.lo `test -f 'maxwell_op.c' || echo '$(srcdir)/'`maxwell_op.c libmaxwell_la-maxwell_pre.lo: maxwell_pre.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmaxwell_la-maxwell_pre.lo -MD -MP -MF $(DEPDIR)/libmaxwell_la-maxwell_pre.Tpo -c -o libmaxwell_la-maxwell_pre.lo `test -f 'maxwell_pre.c' || echo '$(srcdir)/'`maxwell_pre.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmaxwell_la-maxwell_pre.Tpo $(DEPDIR)/libmaxwell_la-maxwell_pre.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maxwell_pre.c' object='libmaxwell_la-maxwell_pre.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmaxwell_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmaxwell_la-maxwell_pre.lo `test -f 'maxwell_pre.c' || echo '$(srcdir)/'`maxwell_pre.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir 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 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 # 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: mpb-1.5/src/maxwell/maxwell.h0000644000175400001440000002044312315341423013141 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MAXWELL_H #define MAXWELL_H #ifdef MPB_REAL # define real mpb_real #endif #include "scalar.h" #include "matrices.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* This data structure is designed to hold k+G related data at a given point. kmag is the length of the k+G vector. The m and n vectors are orthonormal vectors orthogonal to (kx,ky,kz). These are used as the basis for the H vector (to maintain transversality). */ typedef struct { real kmag; real mx, my, mz; real nx, ny, nz; } k_data; /* Data structure to hold the upper triangle of a symmetric real matrix or possibly a Hermitian complex matrix (e.g. the dielectric tensor). */ typedef struct { #ifdef WITH_HERMITIAN_EPSILON real m00, m11, m22; scalar_complex m01, m02, m12; # define ESCALAR_RE(z) CSCALAR_RE(z) # define ESCALAR_IM(z) CSCALAR_IM(z) # define ESCALAR_NORMSQR(z) CSCALAR_NORMSQR(z) # define ASSIGN_ESCALAR(z, re, im) CASSIGN_SCALAR(z, re, im) # define ESCALAR_MULT_CONJ_RE(a, b) CSCALAR_MULT_CONJ_RE(a, b) # define ESCALAR_MULT_CONJ_IM(a, b) CSCALAR_MULT_CONJ_IM(a, b) #else real m00, m01, m02, m11, m12, m22; # define ESCALAR_RE(z) (z) # define ESCALAR_IM(z) (0.0) # define ESCALAR_NORMSQR(z) ((z) * (z)) # define ASSIGN_ESCALAR(z, re, im) (z) = (re); # define ESCALAR_MULT_CONJ_RE(a, b) ((a) * (b)) # define ESCALAR_MULT_CONJ_IM(a, b) (0.0) #endif } symmetric_matrix; #ifdef WITH_HERMITIAN_EPSILON # define DIAG_SYMMETRIC_MATRIX(m) ((m).m01.re == 0.0 && (m).m01.im == 0.0 && \ (m).m02.re == 0.0 && (m).m02.im == 0.0 && \ (m).m12.re == 0.0 && (m).m12.im == 0.0) #else # define DIAG_SYMMETRIC_MATRIX(m) ((m).m01 == 0.0 && \ (m).m02 == 0.0 && \ (m).m12 == 0.0) #endif #define NO_PARITY (0) #define EVEN_Z_PARITY (1<<0) #define ODD_Z_PARITY (1<<1) #define EVEN_Y_PARITY (1<<2) #define ODD_Y_PARITY (1<<3) #define MAX_NPLANS 32 typedef struct { int nx, ny, nz; int local_nx, local_ny; int local_x_start, local_y_start; int last_dim, last_dim_size, other_dims; int num_bands; int N, local_N, N_start, alloc_N; int fft_output_size; int max_fft_bands, num_fft_bands; real current_k[3]; /* (in cartesian basis) */ int parity; void *plans[MAX_NPLANS], *iplans[MAX_NPLANS]; int nplans, plans_howmany[MAX_NPLANS], plans_stride[MAX_NPLANS], plans_dist[MAX_NPLANS]; scalar *fft_data, *fft_data2; int zero_k; /* non-zero if k is zero (handled specially) */ k_data *k_plus_G; real *k_plus_G_normsqr; symmetric_matrix *eps_inv; real eps_inv_mean; } maxwell_data; extern maxwell_data *create_maxwell_data(int nx, int ny, int nz, int *local_N, int *N_start, int *alloc_N, int num_bands, int num_fft_bands); extern void destroy_maxwell_data(maxwell_data *d); extern void maxwell_set_num_bands(maxwell_data *d, int num_bands); extern void update_maxwell_data_k(maxwell_data *d, real k[3], real G1[3], real G2[3], real G3[3]); extern void set_maxwell_data_parity(maxwell_data *d, int parity); typedef void (*maxwell_dielectric_function) (symmetric_matrix *eps, symmetric_matrix *eps_inv, const real r[3], void *epsilon_data); typedef int (*maxwell_dielectric_mean_function) (symmetric_matrix *meps, symmetric_matrix *meps_inv, real n[3], real d1, real d2, real d3, real tol, const real r[3], void *epsilon_data); extern void set_maxwell_dielectric(maxwell_data *md, const int mesh_size[3], real R[3][3], real G[3][3], maxwell_dielectric_function epsilon, maxwell_dielectric_mean_function mepsilon, void *epsilon_data); extern void maxwell_sym_matrix_eigs(real eigs[3], const symmetric_matrix *V); extern void maxwell_sym_matrix_invert(symmetric_matrix *Vinv, const symmetric_matrix *V); extern void maxwell_sym_matrix_rotate(symmetric_matrix *RAR, const symmetric_matrix *A_, const double R[3][3]); extern int maxwell_sym_matrix_positive_definite(symmetric_matrix *V); extern void maxwell_compute_fft(int dir, maxwell_data *d, scalar *array_in, scalar *array_out, int howmany, int stride, int dist); extern void maxwell_compute_d_from_H(maxwell_data *d, evectmatrix Xin, scalar_complex *dfield, int cur_band_start, int cur_num_bands); extern void maxwell_compute_h_from_H(maxwell_data *d, evectmatrix Hin, scalar_complex *hfield, int cur_band_start, int cur_num_bands); extern void maxwell_compute_e_from_d(maxwell_data *d, scalar_complex *dfield, int cur_num_bands); extern void maxwell_vectorfield_otherhalf(maxwell_data *d, scalar_complex *field, real phasex,real phasey,real phasez); extern void maxwell_cscalarfield_otherhalf(maxwell_data *d, scalar_complex *field, real phasex, real phasey, real phasez); extern void maxwell_scalarfield_otherhalf(maxwell_data *d, real *field); void assign_symmatrix_vector(scalar_complex *newv, const symmetric_matrix matrix, const scalar_complex *oldv); extern void maxwell_operator(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work); extern void maxwell_simple_precondition(evectmatrix X, void *data, real *eigenvals); extern void maxwell_preconditioner(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); extern void maxwell_preconditioner2(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); extern void maxwell_ucross_op(evectmatrix Xin, evectmatrix Xout, maxwell_data *d, const real u[3]); extern void maxwell_parity_constraint(evectmatrix X, void *data); extern void maxwell_zparity_constraint(evectmatrix X, void *data); extern void maxwell_yparity_constraint(evectmatrix X, void *data); extern int maxwell_zero_k_num_const_bands(evectmatrix X, maxwell_data *d); extern void maxwell_zero_k_set_const_bands(evectmatrix X, maxwell_data *d); extern void maxwell_zero_k_constraint(evectmatrix X, void *data); extern double *maxwell_zparity(evectmatrix X, maxwell_data *d); extern double *maxwell_yparity(evectmatrix X, maxwell_data *d); typedef struct { maxwell_data *d; real target_frequency; } maxwell_target_data; extern maxwell_target_data *create_maxwell_target_data(maxwell_data *d, real target_frequency); extern void destroy_maxwell_target_data(maxwell_target_data *d); extern void maxwell_target_operator1(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work); extern void maxwell_target_operator(evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work); extern void maxwell_target_preconditioner(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); extern void maxwell_target_preconditioner2(evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); extern void spherical_quadrature_points(real *x, real *y, real *z, real *weight, int num_sq_pts); extern int check_maxwell_dielectric(maxwell_data *d, int negative_epsilon_okp); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #ifdef MPB_REAL # undef real #endif #endif /* MAXWELL_H */ mpb-1.5/src/Makefile.in0000644000175400001440000006374212315337034011727 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/mpbconf.h.in $(include_HEADERS) \ $(pkginclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h mpbconf.h CONFIG_CLEAN_FILES = 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)$(libdir)" "$(DESTDIR)$(includedir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libmpb@MPB_SUFFIX@_la_DEPENDENCIES = util/libutil.la \ matrices/libmatrices.la maxwell/libmaxwell.la am_libmpb@MPB_SUFFIX@_la_OBJECTS = libmpb@MPB_SUFFIX@_la_OBJECTS = $(am_libmpb@MPB_SUFFIX@_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libmpb@MPB_SUFFIX@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libmpb@MPB_SUFFIX@_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmpb@MPB_SUFFIX@_la_SOURCES) DIST_SOURCES = $(libmpb@MPB_SUFFIX@_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(include_HEADERS) $(pkginclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)mpbconf.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = util matrices matrixio maxwell lib_LTLIBRARIES = libmpb@MPB_SUFFIX@.la libmpb@MPB_SUFFIX@_la_SOURCES = libmpb@MPB_SUFFIX@_la_LIBADD = util/libutil.la matrices/libmatrices.la maxwell/libmaxwell.la libmpb@MPB_SUFFIX@_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ BUILT_SOURCES = mpb@MPB_SUFFIX@.h include_HEADERS = mpb@MPB_SUFFIX@.h pkginclude_HEADERS = matrices/eigensolver.h matrices/matrices.h \ matrices/scalar.h maxwell/maxwell.h EXTRA_DIST = mpbconf.h.in all: $(BUILT_SOURCES) mpbconf.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mpbconf.h: stamp-h2 @test -f $@ || rm -f stamp-h2 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h2 stamp-h2: $(srcdir)/mpbconf.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/mpbconf.h distclean-hdr: -rm -f mpbconf.h stamp-h2 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || 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)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmpb@MPB_SUFFIX@.la: $(libmpb@MPB_SUFFIX@_la_OBJECTS) $(libmpb@MPB_SUFFIX@_la_DEPENDENCIES) $(EXTRA_libmpb@MPB_SUFFIX@_la_DEPENDENCIES) $(AM_V_CCLD)$(libmpb@MPB_SUFFIX@_la_LINK) -rpath $(libdir) $(libmpb@MPB_SUFFIX@_la_OBJECTS) $(libmpb@MPB_SUFFIX@_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) mpbconf.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-pkgincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgincludeHEADERS .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir 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-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am 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-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgincludeHEADERS mpb@MPB_SUFFIX@.h: mpbconf.h cp -f mpbconf.h $@ # 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: mpb-1.5/src/matrixio/0000755000175400001440000000000012315341510011554 500000000000000mpb-1.5/src/matrixio/matrixio.h0000644000175400001440000000772412315341423013516 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MATRIXIO_H #define MATRIXIO_H #include #if defined(HAVE_HDF5) /* don't use new HDF5 1.8 API (which isn't even fully documented yet, grrr) */ # define H5_USE_16_API 1 # include typedef hid_t matrixio_id_; /* HDF5 changed this datatype in their interfaces starting in version 1.6.4 */ # if H5_VERS_MAJOR > 1 \ || (H5_VERS_MAJOR == 1 && H5_VERS_MINOR > 6) \ || (H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 6 && H5_VERS_RELEASE > 3) typedef hsize_t start_t; # else typedef hssize_t start_t; # endif #else /* no HDF */ typedef int matrixio_id_; /* dummy */ #endif typedef struct { matrixio_id_ id; int parallel; } matrixio_id; extern matrixio_id matrixio_create(const char *fname); matrixio_id matrixio_create_serial(const char *fname); extern matrixio_id matrixio_open(const char *fname, int read_only); matrixio_id matrixio_open_serial(const char *fname, int read_only); extern void matrixio_close(matrixio_id id); extern matrixio_id matrixio_create_sub(matrixio_id id, const char *name, const char *description); extern void matrixio_close_sub(matrixio_id id); extern matrixio_id matrixio_open_dataset(matrixio_id id, const char *name, int rank, const int *dims); extern matrixio_id matrixio_create_dataset(matrixio_id id, const char *name, const char *description, int rank, const int *dims); extern void matrixio_close_dataset(matrixio_id data_id); extern int matrixio_dataset_exists(matrixio_id id, const char *name); extern void matrixio_dataset_delete(matrixio_id id, const char *name); extern void matrixio_write_real_data(matrixio_id data_id, const int *local_dims, const int *local_start, int stride, real *data); extern real *matrixio_read_real_data(matrixio_id id, const char *name, int *rank, int *dims, int local_dim0, int local_dim0_start, int stride, real *data); extern void matrixio_write_string_attr(matrixio_id id, const char *name, const char *val); extern void matrixio_write_data_attr(matrixio_id id, const char *name, const real *val, int rank, const int *dims); extern char *matrixio_read_string_attr(matrixio_id id, const char *name); extern real *matrixio_read_data_attr(matrixio_id id, const char *name, int *rank, int max_rank, int *dims); extern void evectmatrixio_writeall_raw(const char *filename, evectmatrix a); extern void evectmatrixio_readall_raw(const char *filename, evectmatrix a); extern void fieldio_write_complex_field(scalar_complex *field, int rank, const int dims[3], const int local_dims[3], const int start[3], int which_component, int num_components, const real kvector[3], matrixio_id file_id, int append, matrixio_id data_id[]); extern void fieldio_write_real_vals(real *vals, int rank, const int dims[3], const int local_dims[3], const int start[3], matrixio_id file_id, int append, const char *dataname, matrixio_id *data_id); #endif /* MATRIXIO_H */ mpb-1.5/src/matrixio/Makefile.am0000644000175400001440000000025712315326040013535 00000000000000noinst_LIBRARIES = libmatrixio.a libmatrixio_a_SOURCES = evectmatrixio.c fieldio.c matrixio.c matrixio.h libmatrixio_a_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../matrices mpb-1.5/src/matrixio/evectmatrixio.c0000644000175400001440000000370412315341423014532 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include "matrixio.h" void evectmatrixio_writeall_raw(const char *filename, evectmatrix a) { int dims[4], start[4] = {0, 0, 0, 0}; const int rank = 4; matrixio_id file_id, data_id; dims[0] = a.N; dims[1] = a.c; dims[2] = a.p; dims[3] = SCALAR_NUMVALS; start[0] = a.Nstart; file_id = matrixio_create(filename); data_id = matrixio_create_dataset(file_id, "rawdata", NULL, rank, dims); dims[0] = a.localN; matrixio_write_real_data(data_id, dims, start, 1, (real *) a.data); matrixio_close_dataset(data_id); matrixio_close(file_id); } void evectmatrixio_readall_raw(const char *filename, evectmatrix a) { int rank = 4, dims[4]; matrixio_id file_id; dims[0] = a.N; dims[1] = a.c; dims[2] = a.p; dims[3] = SCALAR_NUMVALS; file_id = matrixio_open(filename, 1); CHECK(matrixio_read_real_data(file_id, "rawdata", &rank, dims, a.localN, a.Nstart, 1, (real *) a.data), "error reading data set in file"); matrixio_close(file_id); } mpb-1.5/src/matrixio/fieldio.c0000644000175400001440000001100112315341423013247 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include #include "config.h" #include #include #include "matrixio.h" #define TWOPI 6.2831853071795864769252867665590057683943388 #define MAX2(a,b) ((a) > (b) ? (a) : (b)) /* note that kvector here is given in the reciprocal basis ...data_id should be of length at 2*num_components */ void fieldio_write_complex_field(scalar_complex *field, int rank, const int dims[3], const int local_dims[3], const int start[3], int which_component, int num_components, const real *kvector, matrixio_id file_id, int append, matrixio_id data_id[]) { int i, j, k, component, ri_part; rank = dims[2] == 1 ? (dims[1] == 1 ? 1 : 2) : 3; if (kvector) { real s[3]; /* the step size between grid points dotted with k */ scalar_complex *phasex, *phasey, *phasez; for (i = 0; i < 3; ++i) s[i] = TWOPI * kvector[i] / dims[i]; /* cache exp(ikx) along each of the directions, for speed */ CHK_MALLOC(phasex, scalar_complex, local_dims[0]); CHK_MALLOC(phasey, scalar_complex, local_dims[1]); CHK_MALLOC(phasez, scalar_complex, local_dims[2]); for (i = 0; i < local_dims[0]; ++i) { real phase = s[0] * (i + start[0]); phasex[i].re = cos(phase); phasex[i].im = sin(phase); } for (j = 0; j < local_dims[1]; ++j) { real phase = s[1] * (j + start[1]); phasey[j].re = cos(phase); phasey[j].im = sin(phase); } for (k = 0; k < local_dims[2]; ++k) { real phase = s[2] * (k + start[2]); phasez[k].re = cos(phase); phasez[k].im = sin(phase); } /* Now, multiply field by exp(i k*r): */ for (i = 0; i < local_dims[0]; ++i) { scalar_complex px = phasex[i]; for (j = 0; j < local_dims[1]; ++j) { scalar_complex py; real re = phasey[j].re, im = phasey[j].im; py.re = px.re * re - px.im * im; py.im = px.re * im + px.im * re; for (k = 0; k < local_dims[2]; ++k) { int ijk = ((i*local_dims[1] + j)*local_dims[2] + k)*3; real p_re, p_im; real re = phasez[k].re, im = phasez[k].im; p_re = py.re * re - py.im * im; p_im = py.re * im + py.im * re; for (component = 0; component < 3; ++component) { int ijkc = ijk + component; re = field[ijkc].re; im = field[ijkc].im; field[ijkc].re = re * p_re - im * p_im; field[ijkc].im = im * p_re + re * p_im; } } } } free(phasez); free(phasey); free(phasex); } /* write hyperslabs for each field component: */ for (component = 0; component < num_components; ++component) if (component == which_component || which_component < 0) for (ri_part = 0; ri_part < 2; ++ri_part) { char name[] = "x.i"; name[0] = (num_components == 1 ? 'c' : 'x') + component; name[2] = ri_part ? 'i' : 'r'; if (!append) data_id[component*2 + ri_part] = matrixio_create_dataset(file_id, name, NULL, rank, dims); matrixio_write_real_data( data_id[component*2 + ri_part], local_dims, start, 2 * num_components, ri_part ? &field[component].im : &field[component].re); } } void fieldio_write_real_vals(real *vals, int rank, const int dims[3], const int local_dims[3], const int start[3], matrixio_id file_id, int append, const char *dataname, matrixio_id *data_id) { rank = dims[2] == 1 ? (dims[1] == 1 ? 1 : 2) : 3; if (!append || data_id->id < 0) *data_id = matrixio_create_dataset(file_id, dataname, NULL, rank,dims); matrixio_write_real_data(*data_id,local_dims,start,1,vals); } mpb-1.5/src/matrixio/matrixio.c0000644000175400001440000006173412315341423013512 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* matrixio.c: This file layers a "matrixio" abstraction on top of the HDF5 binary i/o interface. This abstraction should make HDF5 much easier to use for our purposes, and could also conceivably allow us to replace HDF5 with some other file format (e.g. HDF4). */ #include #include #include #include "config.h" #include #include #include #include "matrixio.h" #include /*****************************************************************************/ /* If we have the H5Pset_fapl_mpio function (which is available if HDF5 was compiled for MPI), then we can perform collective file i/o operations (e.g. all processes call H5Fcreate at the same time to create one file). If we don't, however, then we deal with it by having one process work with the file at a time: "exclusive" access. The following macro helps us select different bits of code depending upon whether this is the case. */ #ifdef HAVE_H5PSET_MPI /* old name for this routine */ # define H5Pset_fapl_mpio H5Pset_mpi # ifndef HAVE_H5PSET_FAPL_MPIO # define HAVE_H5PSET_FAPL_MPIO 1 # endif #endif #ifdef HAVE_H5PSET_FAPL_MPIO # define IF_EXCLUSIVE(yes,no) no #else # define IF_EXCLUSIVE(yes,no) yes #endif /*****************************************************************************/ /* Normally, HDF5 prints out all sorts of error messages, e.g. if a dataset can't be found, in addition to returning an error code. The following macro can be wrapped around code to temporarily suppress error messages. */ #define SUPPRESS_HDF5_ERRORS(statements) { \ H5E_auto_t xxxxx_err_func; \ void *xxxxx_err_func_data; \ H5Eget_auto(&xxxxx_err_func, &xxxxx_err_func_data); \ H5Eset_auto(NULL, NULL); \ { statements; } \ H5Eset_auto(xxxxx_err_func, xxxxx_err_func_data); \ } /*****************************************************************************/ /* Wrappers to write/read an attribute attached to id. HDF5 attributes can *not* be attached to files, in which case we'll write/read it as an ordinary dataset. Ugh. */ static void write_attr(matrixio_id id, matrixio_id_ type_id, matrixio_id_ space_id, const char *name, const void *val) { #if defined(HAVE_HDF5) hid_t attr_id; #ifndef HAVE_H5PSET_FAPL_MPIO if (!mpi_is_master() && id.parallel) return; /* only one process should add attributes */ #else /* otherwise, the operations must be performed collectively */ #endif if (H5I_FILE == H5Iget_type(id.id)) { attr_id = H5Dcreate(id.id, name, type_id, space_id, H5P_DEFAULT); CHECK(attr_id >= 0, "error creating HDF attr"); H5Dwrite(attr_id, type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, val); H5Dclose(attr_id); } else { attr_id = H5Acreate(id.id, name, type_id, space_id, H5P_DEFAULT); CHECK(attr_id >= 0, "error creating HDF attr"); H5Awrite(attr_id, type_id, val); H5Aclose(attr_id); } #endif } static matrixio_id open_attr(matrixio_id id, matrixio_id_ *type_id, matrixio_id_ *space_id, const char *name) { matrixio_id attr_id; attr_id.parallel = id.parallel; attr_id.id = -1; #if defined(HAVE_HDF5) if (H5I_FILE == H5Iget_type(id.id)) { SUPPRESS_HDF5_ERRORS(attr_id.id = H5Dopen(id.id, name)); if (attr_id.id >= 0) { *type_id = H5Dget_type(attr_id.id); *space_id = H5Dget_space(attr_id.id); } } else { SUPPRESS_HDF5_ERRORS(attr_id.id = H5Aopen_name(id.id, name)); if (attr_id.id >= 0) { *type_id = H5Aget_type(attr_id.id); *space_id = H5Aget_space(attr_id.id); } } #endif return attr_id; } static void read_attr(matrixio_id id, matrixio_id attr_id, matrixio_id_ mem_type_id, void *val) { #if defined(HAVE_HDF5) if (H5I_FILE == H5Iget_type(id.id)) { H5Dread(attr_id.id, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, val); } else { H5Aread(attr_id.id, mem_type_id, val); } #endif } static void close_attr(matrixio_id id, matrixio_id attr_id) { #if defined(HAVE_HDF5) if (H5I_FILE == H5Iget_type(id.id)) { H5Dclose(attr_id.id); } else { H5Aclose(attr_id.id); } #endif } /*****************************************************************************/ void matrixio_write_string_attr(matrixio_id id, const char *name, const char *val) { #if defined(HAVE_HDF5) hid_t type_id; hid_t space_id; if (!val || !name || !name[0] || !val[0]) return; /* don't try to create empty attributes */ type_id = H5Tcopy(H5T_C_S1); H5Tset_size(type_id, strlen(val) + 1); space_id = H5Screate(H5S_SCALAR); write_attr(id, type_id, space_id, name, val); H5Sclose(space_id); H5Tclose(type_id); #endif } void matrixio_write_data_attr(matrixio_id id, const char *name, const real *val, int rank, const int *dims) { #if defined(HAVE_HDF5) hid_t type_id; hid_t space_id; hsize_t *space_dims; int i; if (!val || !name || !name[0] || rank < 0 || !dims) return; /* don't try to create empty attributes */ #if defined(SCALAR_SINGLE_PREC) type_id = H5T_NATIVE_FLOAT; #elif defined(SCALAR_LONG_DOUBLE_PREC) type_id = H5T_NATIVE_LDOUBLE; #else type_id = H5T_NATIVE_DOUBLE; #endif if (rank > 0) { CHK_MALLOC(space_dims, hsize_t, rank); for (i = 0; i < rank; ++i) space_dims[i] = dims[i]; space_id = H5Screate_simple(rank, space_dims, NULL); free(space_dims); } else { space_id = H5Screate(H5S_SCALAR); } write_attr(id, type_id, space_id, name, val); H5Sclose(space_id); #endif } char *matrixio_read_string_attr(matrixio_id id, const char *name) { #if defined(HAVE_HDF5) matrixio_id attr_id; hid_t type_id; hid_t space_id; int len; char *s = NULL; if (!name || !name[0]) return NULL; /* don't try to read empty-named attributes */ attr_id = open_attr(id, &type_id, &space_id, name); if (attr_id.id < 0) return NULL; if (H5Sget_simple_extent_npoints(space_id) == 1) { len = H5Tget_size(type_id); H5Tclose(type_id); type_id = H5Tcopy(H5T_C_S1); H5Tset_size(type_id, len); CHK_MALLOC(s, char, len); read_attr(id, attr_id, type_id, s); } H5Tclose(type_id); H5Sclose(space_id); close_attr(id, attr_id); return s; #else return NULL; #endif } real *matrixio_read_data_attr(matrixio_id id, const char *name, int *rank, int max_rank, int *dims) { #if defined(HAVE_HDF5) matrixio_id attr_id; hid_t type_id, mem_type_id, space_id; real *d = NULL; if (!name || !name[0] || max_rank < 0 || !dims) return NULL; /* don't try to create empty attributes */ #if defined(SCALAR_SINGLE_PREC) mem_type_id = H5T_NATIVE_FLOAT; #elif defined(SCALAR_LONG_DOUBLE_PREC) mem_type_id = H5T_NATIVE_LDOUBLE; #else mem_type_id = H5T_NATIVE_DOUBLE; #endif attr_id = open_attr(id, &type_id, &space_id, name); if (attr_id.id < 0) return NULL; *rank = H5Sget_simple_extent_ndims(space_id); if (*rank <= max_rank) { if (*rank > 0) { int i; hsize_t *space_dims, *maxdims; CHK_MALLOC(space_dims, hsize_t, *rank); CHK_MALLOC(maxdims, hsize_t, *rank); H5Sget_simple_extent_dims(space_id, space_dims, maxdims); for (i = 0; i < *rank; ++i) dims[i] = space_dims[i]; free(maxdims); free(space_dims); } CHK_MALLOC(d, real, H5Sget_simple_extent_npoints(space_id)); read_attr(id, attr_id, mem_type_id, d); } H5Tclose(type_id); H5Sclose(space_id); close_attr(id, attr_id); return d; #else return NULL; #endif } /*****************************************************************************/ #define FNAME_SUFFIX ".h5" /* standard HDF5 filename suffix */ static char *add_fname_suffix(const char *fname) { int oldlen = strlen(fname); int suflen = strlen(FNAME_SUFFIX); char *new_fname; CHECK(fname, "null filename!"); CHK_MALLOC(new_fname, char, oldlen + suflen + 1); strcpy(new_fname, fname); /* only add suffix if it is not already there: */ if (strstr(new_fname, FNAME_SUFFIX) != new_fname + oldlen - suflen) strcat(new_fname, FNAME_SUFFIX); return new_fname; } /*****************************************************************************/ #ifndef HAVE_H5PSET_FAPL_MPIO static int matrixio_critical_section_tag = 0; #endif static matrixio_id matrixio_create_(const char *fname, int parallel) { #if defined(HAVE_HDF5) char *new_fname; matrixio_id id; hid_t access_props; access_props = H5Pcreate (H5P_FILE_ACCESS); # if defined(HAVE_MPI) && defined(HAVE_H5PSET_FAPL_MPIO) if (parallel) CHECK(H5Pset_fapl_mpio(access_props, MPI_COMM_WORLD, MPI_INFO_NULL) >= 0, "error initializing MPI file access"); # endif new_fname = add_fname_suffix(fname); # ifdef HAVE_H5PSET_FAPL_MPIO id.id = H5Fcreate(new_fname, H5F_ACC_TRUNC, H5P_DEFAULT, access_props); # else if (parallel) mpi_begin_critical_section(matrixio_critical_section_tag); if (mpi_is_master() || !parallel) id.id = H5Fcreate(new_fname, H5F_ACC_TRUNC,H5P_DEFAULT,access_props); else id.id = H5Fopen(new_fname, H5F_ACC_RDWR, access_props); # endif id.parallel = parallel; CHECK(id.id >= 0, "error creating HDF output file"); free(new_fname); H5Pclose(access_props); return id; #else mpi_one_fprintf(stderr, "matrixio: cannot output \"%s\" (compiled without HDF)\n", fname); { matrixio_id id = {0,0}; return id; } #endif } matrixio_id matrixio_create(const char *fname) { return matrixio_create_(fname, 1); } matrixio_id matrixio_create_serial(const char *fname) { return matrixio_create_(fname, 0); } static matrixio_id matrixio_open_(const char *fname, int read_only, int parallel) { #if defined(HAVE_HDF5) char *new_fname; matrixio_id id; hid_t access_props; access_props = H5Pcreate (H5P_FILE_ACCESS); # if defined(HAVE_MPI) && defined(HAVE_H5PSET_FAPL_MPIO) if (parallel) H5Pset_fapl_mpio(access_props, MPI_COMM_WORLD, MPI_INFO_NULL); # endif new_fname = add_fname_suffix(fname); IF_EXCLUSIVE(if (parallel) mpi_begin_critical_section(matrixio_critical_section_tag),0); if (read_only) id.id = H5Fopen(new_fname, H5F_ACC_RDONLY, access_props); else id.id = H5Fopen(new_fname, H5F_ACC_RDWR, access_props); id.parallel = parallel; CHECK(id.id >= 0, "error opening HDF input file"); free(new_fname); H5Pclose(access_props); return id; #else CHECK(0, "no matrixio implementation is linked"); { matrixio_id id = {0,0}; return id; } #endif } void matrixio_close(matrixio_id id) { #if defined(HAVE_HDF5) CHECK(H5Fclose(id.id) >= 0, "error closing HDF file"); IF_EXCLUSIVE(if (id.parallel) mpi_end_critical_section(matrixio_critical_section_tag++),0); #endif } matrixio_id matrixio_open(const char *fname, int read_only) { return matrixio_open_(fname, read_only, 1); } matrixio_id matrixio_open_serial(const char *fname, int read_only) { return matrixio_open_(fname, read_only, 0); } /*****************************************************************************/ matrixio_id matrixio_create_sub(matrixio_id id, const char *name, const char *description) { matrixio_id sub_id; sub_id.id = 0; sub_id.parallel = id.parallel; #if defined(HAVE_HDF5) # ifdef HAVE_H5PSET_FAPL_MPIO /* H5Gcreate is collective */ sub_id.id = H5Gcreate(id.id, name, 0 /* ==> default size */ ); matrixio_write_string_attr(sub_id, "description", description); # else /* when running a parallel job, only the master process creates the group. It flushes the group to disk and then the other processes open the group. Is this the right thing to do, or is the H5Gcreate function parallel-aware? */ if (mpi_is_master() || !id.parallel) { sub_id.id = H5Gcreate(id.id, name, 0 /* ==> default size */ ); matrixio_write_string_attr(sub_id, "description", description); H5Fflush(sub_id.id, H5F_SCOPE_GLOBAL); IF_EXCLUSIVE(0,if (id.parallel) MPI_Barrier(MPI_COMM_WORLD)); } else { IF_EXCLUSIVE(0,if (id.parallel) MPI_Barrier(MPI_COMM_WORLD)); sub_id.id = H5Gopen(id.id, name); } # endif #endif return sub_id; } void matrixio_close_sub(matrixio_id id) { #if defined(HAVE_HDF5) CHECK(H5Gclose(id.id) >= 0, "error closing HDF group"); #endif } /*****************************************************************************/ matrixio_id matrixio_open_dataset(matrixio_id id, const char *name, int rank, const int *dims) { matrixio_id data_id; data_id.id = 0; data_id.parallel = id.parallel; #if defined(HAVE_HDF5) { int i, rank_copy; hid_t space_id; hsize_t *dims_copy, *maxdims; CHECK((data_id.id = H5Dopen(id.id, name)) >= 0, "error in H5Dopen"); CHECK((space_id = H5Dget_space(data_id.id)) >= 0, "error in H5Dget_space"); rank_copy = H5Sget_simple_extent_ndims(space_id); CHECK(rank == rank_copy, "rank in HDF5 file doesn't match expected rank"); CHK_MALLOC(dims_copy, hsize_t, rank); CHK_MALLOC(maxdims, hsize_t, rank); H5Sget_simple_extent_dims(space_id, dims_copy, maxdims); free(maxdims); for (i = 0; i < rank; ++i) { CHECK(dims_copy[i] == dims[i], "array size in HDF5 file doesn't match expected size"); } free(dims_copy); H5Sclose(space_id); } #endif return data_id; } /*****************************************************************************/ matrixio_id matrixio_create_dataset(matrixio_id id, const char *name, const char *description, int rank, const int *dims) { matrixio_id data_id; data_id.id = 0; data_id.parallel = id.parallel; #if defined(HAVE_HDF5) { int i; hid_t space_id, type_id; hsize_t *dims_copy; /* delete pre-existing datasets, or we'll have an error; I think we can only do this on the master process. (?) */ if (matrixio_dataset_exists(id, name)) { # ifdef HAVE_H5PSET_FAPL_MPIO /* H5Gunlink is collective */ matrixio_dataset_delete(id, name); # else if (mpi_is_master() || !id.parallel) { matrixio_dataset_delete(id, name); H5Fflush(id.id, H5F_SCOPE_GLOBAL); } IF_EXCLUSIVE(0,if (id.parallel) MPI_Barrier(MPI_COMM_WORLD)); # endif } CHECK(rank > 0, "non-positive rank"); CHK_MALLOC(dims_copy, hsize_t, rank); for (i = 0; i < rank; ++i) dims_copy[i] = dims[i]; space_id = H5Screate_simple(rank, dims_copy, NULL); free(dims_copy); #if defined(SCALAR_SINGLE_PREC) type_id = H5T_NATIVE_FLOAT; #elif defined(SCALAR_LONG_DOUBLE_PREC) type_id = H5T_NATIVE_LDOUBLE; #else type_id = H5T_NATIVE_DOUBLE; #endif /* Create the dataset. Note that, on parallel machines, H5Dcreate should do the right thing; it is supposedly a collective operation. */ IF_EXCLUSIVE( if (mpi_is_master() || !id.parallel) data_id.id = H5Dcreate(id.id,name,type_id,space_id,H5P_DEFAULT); else data_id.id = H5Dopen(id.id, name), data_id.id = H5Dcreate(id.id, name, type_id, space_id, H5P_DEFAULT)); H5Sclose(space_id); /* the dataset should have its own copy now */ matrixio_write_string_attr(data_id, "description", description); } #endif return data_id; } void matrixio_close_dataset(matrixio_id data_id) { #if defined(HAVE_HDF5) CHECK(H5Dclose(data_id.id) >= 0, "error closing HDF dataset"); #endif } int matrixio_dataset_exists(matrixio_id id, const char *name) { #if defined(HAVE_HDF5) hid_t data_id; SUPPRESS_HDF5_ERRORS(data_id = H5Dopen(id.id, name)); if (data_id >= 0) H5Dclose(data_id); return (data_id >= 0); #else return 0; #endif } void matrixio_dataset_delete(matrixio_id id, const char *name) { #if defined(HAVE_HDF5) H5Gunlink(id.id, name); #endif } /*****************************************************************************/ void matrixio_write_real_data(matrixio_id data_id, const int *local_dims, const int *local_start, int stride, real *data) { #if defined(HAVE_HDF5) int rank; hsize_t *dims, *maxdims; hid_t space_id, type_id, mem_space_id; start_t *start; hsize_t *strides, *count, count_prod; int i; real *data_copy; int data_copy_stride = 1, free_data_copy = 0, do_write = 1; /*******************************************************************/ /* Get dimensions of dataset */ space_id = H5Dget_space(data_id.id); rank = H5Sget_simple_extent_ndims(space_id); CHK_MALLOC(dims, hsize_t, rank); CHK_MALLOC(maxdims, hsize_t, rank); H5Sget_simple_extent_dims(space_id, dims, maxdims); free(maxdims); #if defined(SCALAR_SINGLE_PREC) type_id = H5T_NATIVE_FLOAT; #elif defined(SCALAR_LONG_DOUBLE_PREC) type_id = H5T_NATIVE_LDOUBLE; #else type_id = H5T_NATIVE_DOUBLE; #endif /*******************************************************************/ /* if stride > 1, make a contiguous copy; hdf5 is much faster in this case. */ if (stride > 1) { int N = 1; for (i = 0; i < rank; ++i) N *= local_dims[i]; CHK_MALLOC(data_copy, real, N); if (data_copy) { free_data_copy = 1; for (i = 0; i < (N & 3); ++i) data_copy[i] = data[i * stride]; for (; i < N; i += 4) { real d0 = data[i * stride]; real d1 = data[(i + 1) * stride]; real d2 = data[(i + 2) * stride]; real d3 = data[(i + 3) * stride]; data_copy[i] = d0; data_copy[i+1] = d1; data_copy[i+2] = d2; data_copy[i+3] = d3; } CHECK(i == N, "bug in matrixio copy routine"); } else { data_copy = data; data_copy_stride = stride; } } else data_copy = data; /*******************************************************************/ /* Before we can write the data to the data set, we must define the dimensions and "selections" of the arrays to be read & written: */ CHK_MALLOC(start, start_t, rank); CHK_MALLOC(strides, hsize_t, rank); CHK_MALLOC(count, hsize_t, rank); count_prod = 1; for (i = 0; i < rank; ++i) { start[i] = local_start[i]; count[i] = local_dims[i]; strides[i] = 1; count_prod *= count[i]; } if (count_prod > 0) { H5Sselect_hyperslab(space_id, H5S_SELECT_SET, start, NULL, count, NULL); for (i = 0; i < rank; ++i) start[i] = 0; strides[rank - 1] = data_copy_stride; count[rank - 1] *= data_copy_stride; mem_space_id = H5Screate_simple(rank, count, NULL); count[rank - 1] = local_dims[rank - 1]; H5Sselect_hyperslab(mem_space_id, H5S_SELECT_SET, start, data_copy_stride <= 1 ? NULL : strides, count, NULL); } else { /* this can happen on leftover processes in MPI */ H5Sselect_none(space_id); mem_space_id = H5Scopy(space_id); /* can't create an empty space */ H5Sselect_none(mem_space_id); do_write = 0; /* HDF5 complains about empty dataspaces otherwise */ } /*******************************************************************/ /* Write the data, then free all the stuff we've allocated. */ if (do_write) H5Dwrite(data_id.id, type_id, mem_space_id, space_id, H5P_DEFAULT, data_copy); if (free_data_copy) free(data_copy); H5Sclose(mem_space_id); free(count); free(strides); free(start); free(dims); H5Sclose(space_id); #endif } #if defined(HAVE_HDF5) /* check if the given name is a dataset in group_id, and if so set d to point to a char** with a copy of name. */ static herr_t find_dataset(hid_t group_id, const char *name, void *d) { char **dname = (char **) d; H5G_stat_t info; H5Gget_objinfo(group_id, name, 1, &info); if (info.type == H5G_DATASET) { CHK_MALLOC(*dname, char, strlen(name) + 1); strcpy(*dname, name); return 1; } return 0; } #endif /*****************************************************************************/ /* Read real data from the file/group 'id', from the dataset 'name'. If name is NULL, reads from the first dataset in 'id'. If data is non-NULL, then data must have dimensions given in rank and dims (* stride); actually, what is read in is the hyperslab given by the local_dim0* parameters. The dataset is read into 'data' with the given 'stride'. Returns the data pointer. If data is NULL, then upon output rank and dims point to the size of the array, and a pointer to the (malloc'ed) data is returned. On input, *rank should point to the maximum allowed rank (e.g. the length of the dims array)! The local_dim* and stride parameters are ignored here. Returns NULL if the dataset could not be found in id. */ real *matrixio_read_real_data(matrixio_id id, const char *name, int *rank, int *dims, int local_dim0, int local_dim0_start, int stride, real *data) { #if defined(HAVE_HDF5) hid_t space_id, type_id, data_id, mem_space_id; hsize_t *dims_copy, *maxdims; char *dname; int i; CHECK(*rank > 0, "non-positive rank"); /*******************************************************************/ /* Open the data set and check the dimensions: */ if (name) { CHK_MALLOC(dname, char, strlen(name) + 1); strcpy(dname, name); } else { if (H5Giterate(id.id, "/", NULL, find_dataset, &dname) < 0) return NULL; } SUPPRESS_HDF5_ERRORS(data_id = H5Dopen(id.id, dname)); free(dname); if (data_id < 0) return NULL; CHECK((space_id = H5Dget_space(data_id)) >= 0, "error in H5Dget_space"); { int filerank = H5Sget_simple_extent_ndims(space_id); if (data) { CHECK(*rank == filerank, "rank in HDF5 file doesn't match expected rank"); } else { CHECK(*rank >= filerank, "rank in HDF5 file is too big"); *rank = filerank; } } CHK_MALLOC(dims_copy, hsize_t, *rank); CHK_MALLOC(maxdims, hsize_t, *rank); H5Sget_simple_extent_dims(space_id, dims_copy, maxdims); free(maxdims); if (data) for (i = 0; i < *rank; ++i) { CHECK(dims_copy[i] == dims[i], "array size in HDF5 file doesn't match expected size"); } else for (i = 0; i < *rank; ++i) dims[i] = dims_copy[i]; #if defined(SCALAR_SINGLE_PREC) type_id = H5T_NATIVE_FLOAT; #elif defined(SCALAR_LONG_DOUBLE_PREC) type_id = H5T_NATIVE_LDOUBLE; #else type_id = H5T_NATIVE_DOUBLE; #endif /*******************************************************************/ /* Before we can read the data from the data set, we must define the dimensions and "selections" of the arrays to be read & written: */ if (data) { start_t *start; hsize_t *strides, *count; CHK_MALLOC(start, start_t, *rank); CHK_MALLOC(strides, hsize_t, *rank); CHK_MALLOC(count, hsize_t, *rank); for (i = 0; i < *rank; ++i) { start[i] = 0; strides[i] = 1; count[i] = dims[i]; } dims_copy[0] = local_dim0; dims_copy[*rank - 1] *= stride; start[0] = 0; strides[*rank - 1] = stride; count[0] = local_dim0; mem_space_id = H5Screate_simple(*rank, dims_copy, NULL); H5Sselect_hyperslab(mem_space_id, H5S_SELECT_SET, start, strides, count, NULL); start[0] = local_dim0_start; count[0] = local_dim0; H5Sselect_hyperslab(space_id, H5S_SELECT_SET, start, NULL, count, NULL); free(count); free(strides); free(start); } else { int N = 1; for (i = 0; i < *rank; ++i) N *= dims[i]; CHK_MALLOC(data, real, N); mem_space_id = H5S_ALL; H5Sclose(space_id); space_id = H5S_ALL; } /*******************************************************************/ /* Read the data, then free all the H5 identifiers. */ CHECK(H5Dread(data_id, type_id, mem_space_id, space_id, H5P_DEFAULT, data) >= 0, "error reading HDF5 dataset"); if (mem_space_id != H5S_ALL) H5Sclose(mem_space_id); free(dims_copy); if (space_id != H5S_ALL) H5Sclose(space_id); H5Dclose(data_id); return data; #else CHECK(0, "no matrixio implementation is linked"); return NULL; #endif } mpb-1.5/src/matrixio/Makefile.in0000644000175400001440000005727012315337034013562 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/matrixio DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libmatrixio_a_AR = $(AR) $(ARFLAGS) libmatrixio_a_LIBADD = am_libmatrixio_a_OBJECTS = libmatrixio_a-evectmatrixio.$(OBJEXT) \ libmatrixio_a-fieldio.$(OBJEXT) \ libmatrixio_a-matrixio.$(OBJEXT) libmatrixio_a_OBJECTS = $(am_libmatrixio_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmatrixio_a_SOURCES) DIST_SOURCES = $(libmatrixio_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libmatrixio.a libmatrixio_a_SOURCES = evectmatrixio.c fieldio.c matrixio.c matrixio.h libmatrixio_a_CPPFLAGS = -I$(srcdir)/../util -I$(srcdir)/../matrices all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/matrixio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/matrixio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmatrixio.a: $(libmatrixio_a_OBJECTS) $(libmatrixio_a_DEPENDENCIES) $(EXTRA_libmatrixio_a_DEPENDENCIES) $(AM_V_at)-rm -f libmatrixio.a $(AM_V_AR)$(libmatrixio_a_AR) libmatrixio.a $(libmatrixio_a_OBJECTS) $(libmatrixio_a_LIBADD) $(AM_V_at)$(RANLIB) libmatrixio.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrixio_a-evectmatrixio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrixio_a-fieldio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrixio_a-matrixio.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libmatrixio_a-evectmatrixio.o: evectmatrixio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrixio_a-evectmatrixio.o -MD -MP -MF $(DEPDIR)/libmatrixio_a-evectmatrixio.Tpo -c -o libmatrixio_a-evectmatrixio.o `test -f 'evectmatrixio.c' || echo '$(srcdir)/'`evectmatrixio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrixio_a-evectmatrixio.Tpo $(DEPDIR)/libmatrixio_a-evectmatrixio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='evectmatrixio.c' object='libmatrixio_a-evectmatrixio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrixio_a-evectmatrixio.o `test -f 'evectmatrixio.c' || echo '$(srcdir)/'`evectmatrixio.c libmatrixio_a-evectmatrixio.obj: evectmatrixio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrixio_a-evectmatrixio.obj -MD -MP -MF $(DEPDIR)/libmatrixio_a-evectmatrixio.Tpo -c -o libmatrixio_a-evectmatrixio.obj `if test -f 'evectmatrixio.c'; then $(CYGPATH_W) 'evectmatrixio.c'; else $(CYGPATH_W) '$(srcdir)/evectmatrixio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrixio_a-evectmatrixio.Tpo $(DEPDIR)/libmatrixio_a-evectmatrixio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='evectmatrixio.c' object='libmatrixio_a-evectmatrixio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrixio_a-evectmatrixio.obj `if test -f 'evectmatrixio.c'; then $(CYGPATH_W) 'evectmatrixio.c'; else $(CYGPATH_W) '$(srcdir)/evectmatrixio.c'; fi` libmatrixio_a-fieldio.o: fieldio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrixio_a-fieldio.o -MD -MP -MF $(DEPDIR)/libmatrixio_a-fieldio.Tpo -c -o libmatrixio_a-fieldio.o `test -f 'fieldio.c' || echo '$(srcdir)/'`fieldio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrixio_a-fieldio.Tpo $(DEPDIR)/libmatrixio_a-fieldio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fieldio.c' object='libmatrixio_a-fieldio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrixio_a-fieldio.o `test -f 'fieldio.c' || echo '$(srcdir)/'`fieldio.c libmatrixio_a-fieldio.obj: fieldio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrixio_a-fieldio.obj -MD -MP -MF $(DEPDIR)/libmatrixio_a-fieldio.Tpo -c -o libmatrixio_a-fieldio.obj `if test -f 'fieldio.c'; then $(CYGPATH_W) 'fieldio.c'; else $(CYGPATH_W) '$(srcdir)/fieldio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrixio_a-fieldio.Tpo $(DEPDIR)/libmatrixio_a-fieldio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fieldio.c' object='libmatrixio_a-fieldio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrixio_a-fieldio.obj `if test -f 'fieldio.c'; then $(CYGPATH_W) 'fieldio.c'; else $(CYGPATH_W) '$(srcdir)/fieldio.c'; fi` libmatrixio_a-matrixio.o: matrixio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrixio_a-matrixio.o -MD -MP -MF $(DEPDIR)/libmatrixio_a-matrixio.Tpo -c -o libmatrixio_a-matrixio.o `test -f 'matrixio.c' || echo '$(srcdir)/'`matrixio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrixio_a-matrixio.Tpo $(DEPDIR)/libmatrixio_a-matrixio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrixio.c' object='libmatrixio_a-matrixio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrixio_a-matrixio.o `test -f 'matrixio.c' || echo '$(srcdir)/'`matrixio.c libmatrixio_a-matrixio.obj: matrixio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrixio_a-matrixio.obj -MD -MP -MF $(DEPDIR)/libmatrixio_a-matrixio.Tpo -c -o libmatrixio_a-matrixio.obj `if test -f 'matrixio.c'; then $(CYGPATH_W) 'matrixio.c'; else $(CYGPATH_W) '$(srcdir)/matrixio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrixio_a-matrixio.Tpo $(DEPDIR)/libmatrixio_a-matrixio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrixio.c' object='libmatrixio_a-matrixio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrixio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrixio_a-matrixio.obj `if test -f 'matrixio.c'; then $(CYGPATH_W) 'matrixio.c'; else $(CYGPATH_W) '$(srcdir)/matrixio.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir 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 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 # 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: mpb-1.5/src/mpbconf.h.in0000644000175400001440000000043212315326133012045 00000000000000#ifndef MPB_H #define MPB_H 1 #undef SCALAR_COMPLEX #undef SCALAR_LONG_DOUBLE_PREC #undef SCALAR_SINGLE_PREC #undef WITH_HERMITIAN_EPSILON #define MPB_REAL 1 /* avoid C++ conflict with MPB's "real" type */ #include "mpb/eigensolver.h" #include "mpb/maxwell.h" #endif /* MPB_H */ mpb-1.5/src/matrices/0000755000175400001440000000000012315341510011527 500000000000000mpb-1.5/src/matrices/Makefile.am0000644000175400001440000000050012315326040013477 00000000000000noinst_LTLIBRARIES = libmatrices.la EXTRA_DIST = README libmatrices_la_SOURCES = blasglue.c blasglue.h eigensolver.c \ eigensolver.h eigensolver_davidson.c eigensolver_utils.c evectmatrix.c \ linmin.c linmin.h matrices.c matrices.h minpack2-linmin.c scalar.h \ sqmatrix.c libmatrices_la_CPPFLAGS = -I$(srcdir)/../util mpb-1.5/src/matrices/minpack2-linmin.c0000644000175400001440000006126312315326076014625 00000000000000/* Copyright (C) 1996 Jorge J. More'. * * 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 */ /* The routines in this file were taken from the MINPACK-2 package by Jorge J. More', specifically its line search subroutines in the MINPACK-2/csrch, in the files dcsrch.f and dcstep.f. MINPACK-2 is software for the solution of systems of nonlinear equations, nonlinear least squares problems, and minimization problems. Web pages and ftp sites for MINPACK-2 can be found at: http://www.mcs.anl.gov/~more/minpack-2/minpack-2.html ftp://info.mcs.anl.gov/pub/MINPACK-2/ http://www-fp.mcs.anl.gov/otc/minpack/summary.html It implements the line search algorithm described in: Jorge J. More and David J. Thuente, "Line search algorithms with guaranteed sufficient decrease," ACM Trans. on Mathematical Software, vol. 20, no. 3, pp. 286-307 (September 1994). The original code was under the copyright and license listed below, but Jorge J. More' graciously granted me permission to distribute under the terms of the GNU General Public License. Original copyright and license statement: * This program discloses material protectable under copyright laws of * the United States. Permission to copy and modify this software and * its documentation for internal research use is hereby granted, * provided that this notice is retained thereon and on all copies or * modifications. The University of Chicago makes no representations * as to the suitability and operability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * Use of this software for commercial purposes is expressly * prohibited without contacting. * * Jorge J. More' * Mathematics and Computer Science Division * Argonne National Laboratory * 9700 S. Cass Ave. * Argonne, Illinois 60439-4844 * e-mail: more@mcs.anl.gov * * Argonne National Laboratory with facilities in the states of * Illinois and Idaho, is owned by The United States Government, and * operated by the University of Chicago under provision of a contract * with the Department of Energy. */ /* minpack2-linmin.f -- translated by f2c (version 19991025). C code cleaned up by Steven G. Johnson . */ #include #include #include "config.h" #include "linmin.h" #define double linmin_real /* Definitions so that we don't need -lf2c or f2c.h: */ typedef double doublereal; typedef int integer; typedef int logical; typedef int ftnlen; #ifndef HAVE_STRNCMP /* provide a strncmp replacement if the system does not provide one: */ static int strncmp(const char *s1, const char *s2, size_t n) { size_t i; for (i = 0; i < n && s1[i] && s2[i] && s1[i] == s2[i]; ++i) ; if (i >= n) return 0; else return (s1[i] - s2[i]); } #endif /* ! HAVE_STRNCMP */ #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #if defined(SCALAR_LONG_DOUBLE_PREC) # define ABS(x) fabsl(x) # define sqrt sqrtl #else # define ABS(x) fabs(x) #endif #define s_cmp(s1, s2, len1, len2) strncmp(s1, s2, MIN(len1, len2)) #define s_copy(s1, s2, len1, len2) strcpy(s1, s2) #define TRUE_ 1 #define FALSE_ 0 /* cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ /* cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ /* Subroutine */ int dcsrch(doublereal *stp, doublereal *f, doublereal *g, doublereal *ftol, doublereal *gtol, doublereal *xtol, char *task, doublereal *stpmin, doublereal *stpmax, integer *isave, doublereal * dsave) { /* System generated locals */ doublereal d__1; /* Builtin functions */ /* Local variables */ integer stage; doublereal finit, ginit, width, ftest, gtest, stmin, stmax, width1, fm, gm, fx, fy, gx, gy; logical brackt; extern /* Subroutine */ int dcstep(doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, logical *, doublereal *, doublereal *); doublereal fxm, fym, gxm, gym, stx, sty; /* ********** */ /* Subroutine dcsrch */ /* This subroutine finds a step that satisfies a sufficient */ /* decrease condition and a curvature condition. */ /* Each call of the subroutine updates an interval with */ /* endpoints stx and sty. The interval is initially chosen */ /* so that it contains a minimizer of the modified function */ /* psi(stp) = f(stp) - f(0) - ftol*stp*f'(0). */ /* If psi(stp) <= 0 and f'(stp) >= 0 for some step, then the */ /* interval is chosen so that it contains a minimizer of f. */ /* The algorithm is designed to find a step that satisfies */ /* the sufficient decrease condition */ /* f(stp) <= f(0) + ftol*stp*f'(0), */ /* and the curvature condition */ /* ABS(f'(stp)) <= gtol*ABS(f'(0)). */ /* If ftol is less than gtol and if, for example, the function */ /* is bounded below, then there is always a step which satisfies */ /* both conditions. */ /* If no step can be found that satisfies both conditions, then */ /* the algorithm stops with a warning. In this case stp only */ /* satisfies the sufficient decrease condition. */ /* A typical invocation of dcsrch has the following outline: */ /* Evaluate the function at stp = 0.0d0; store in f. */ /* Evaluate the gradient at stp = 0.0d0; store in g. */ /* Choose a starting step stp. */ /* task = 'START' */ /* 10 continue */ /* call dcsrch(stp,f,g,ftol,gtol,xtol,task,stpmin,stpmax, */ /* + isave,dsave) */ /* if (task .eq. 'FG') then */ /* Evaluate the function and the gradient at stp */ /* go to 10 */ /* end if */ /* NOTE: The user must not alter work arrays between calls. */ /* The subroutine statement is */ /* subroutine dcsrch(f,g,stp,ftol,gtol,xtol,stpmin,stpmax, */ /* task,isave,dsave) */ /* where */ /* stp is a double precision variable. */ /* On entry stp is the current estimate of a satisfactory */ /* step. On initial entry, a positive initial estimate */ /* must be provided. */ /* On exit stp is the current estimate of a satisfactory step */ /* if task = 'FG'. If task = 'CONV' then stp satisfies */ /* the sufficient decrease and curvature condition. */ /* f is a double precision variable. */ /* On initial entry f is the value of the function at 0. */ /* On subsequent entries f is the value of the */ /* function at stp. */ /* On exit f is the value of the function at stp. */ /* g is a double precision variable. */ /* On initial entry g is the derivative of the function at 0. */ /* On subsequent entries g is the derivative of the */ /* function at stp. */ /* On exit g is the derivative of the function at stp. */ /* ftol is a double precision variable. */ /* On entry ftol specifies a nonnegative tolerance for the */ /* sufficient decrease condition. */ /* On exit ftol is unchanged. */ /* gtol is a double precision variable. */ /* On entry gtol specifies a nonnegative tolerance for the */ /* curvature condition. */ /* On exit gtol is unchanged. */ /* xtol is a double precision variable. */ /* On entry xtol specifies a nonnegative relative tolerance */ /* for an acceptable step. The subroutine exits with a */ /* warning if the relative difference between sty and stx */ /* is less than xtol. */ /* On exit xtol is unchanged. */ /* task is a character variable of length at least 60. */ /* On initial entry task must be set to 'START'. */ /* On exit task indicates the required action: */ /* If task(1:2) = 'FG' then evaluate the function and */ /* derivative at stp and call dcsrch again. */ /* If task(1:4) = 'CONV' then the search is successful. */ /* If task(1:4) = 'WARN' then the subroutine is not able */ /* to satisfy the convergence conditions. The exit value of */ /* stp contains the best point found during the search. */ /* If task(1:5) = 'ERROR' then there is an error in the */ /* input arguments. */ /* On exit with convergence, a warning or an error, the */ /* variable task contains additional information. */ /* stpmin is a double precision variable. */ /* On entry stpmin is a nonnegative lower bound for the step. */ /* On exit stpmin is unchanged. */ /* stpmax is a double precision variable. */ /* On entry stpmax is a nonnegative upper bound for the step. */ /* On exit stpmax is unchanged. */ /* isave is an integer work array of dimension 2. */ /* dsave is a double precision work array of dimension 13. */ /* Subprograms called */ /* MINPACK-2 ... dcstep */ /* MINPACK-1 Project. June 1983. */ /* Argonne National Laboratory. */ /* Jorge J. More' and David J. Thuente. */ /* MINPACK-2 Project. November 1993. */ /* Argonne National Laboratory and University of Minnesota. */ /* Brett M. Averick, Richard G. Carter, and Jorge J. More'. */ /* ********** */ /* Initialization block. */ /* Parameter adjustments */ --dsave; --isave; /* Function Body */ if (s_cmp(task, "START", (ftnlen)5, (ftnlen)5) == 0) { /* Check the input arguments for errors. */ if (*stp < *stpmin) { s_copy(task, "ERROR: STP .LT. STPMIN", task_len, (ftnlen)22); } if (*stp > *stpmax) { s_copy(task, "ERROR: STP .GT. STPMAX", task_len, (ftnlen)22); } if (*g >= 0.) { s_copy(task, "ERROR: INITIAL G .GE. ZERO", task_len, (ftnlen)26); } if (*ftol < 0.) { s_copy(task, "ERROR: FTOL .LT. ZERO", task_len, (ftnlen)21); } if (*gtol < 0.) { s_copy(task, "ERROR: GTOL .LT. ZERO", task_len, (ftnlen)21); } if (*xtol < 0.) { s_copy(task, "ERROR: XTOL .LT. ZERO", task_len, (ftnlen)21); } if (*stpmin < 0.) { s_copy(task, "ERROR: STPMIN .LT. ZERO", task_len, (ftnlen)23); } if (*stpmax < *stpmin) { s_copy(task, "ERROR: STPMAX .LT. STPMIN", task_len, (ftnlen)25); } /* Exit if there are errors on input. */ if (s_cmp(task, "ERROR", (ftnlen)5, (ftnlen)5) == 0) { return 0; } /* Initialize local variables. */ brackt = FALSE_; stage = 1; finit = *f; ginit = *g; gtest = *ftol * ginit; width = *stpmax - *stpmin; width1 = width / .5; /* The variables stx, fx, gx contain the values of the step, */ /* function, and derivative at the best step. */ /* The variables sty, fy, gy contain the value of the step, */ /* function, and derivative at sty. */ /* The variables stp, f, g contain the values of the step, */ /* function, and derivative at stp. */ stx = 0.; fx = finit; gx = ginit; sty = 0.; fy = finit; gy = ginit; stmin = 0.; stmax = *stp + *stp * 4.; s_copy(task, "FG", task_len, (ftnlen)2); goto L10; } else { /* Restore local variables. */ if (isave[1] == 1) { brackt = TRUE_; } else { brackt = FALSE_; } stage = isave[2]; ginit = dsave[1]; gtest = dsave[2]; gx = dsave[3]; gy = dsave[4]; finit = dsave[5]; fx = dsave[6]; fy = dsave[7]; stx = dsave[8]; sty = dsave[9]; stmin = dsave[10]; stmax = dsave[11]; width = dsave[12]; width1 = dsave[13]; } /* If psi(stp) <= 0 and f'(stp) >= 0 for some step, then the */ /* algorithm enters the second stage. */ ftest = finit + *stp * gtest; if (stage == 1 && *f <= ftest && *g >= 0.) { stage = 2; } /* Test for warnings. */ if (brackt && (*stp <= stmin || *stp >= stmax)) { s_copy(task, "WARNING: ROUNDING ERRORS PREVENT PROGRESS", task_len, ( ftnlen)41); } if (brackt && stmax - stmin <= *xtol * stmax) { s_copy(task, "WARNING: XTOL TEST SATISFIED", task_len, (ftnlen)28); } if (*stp == *stpmax && *f <= ftest && *g <= gtest) { s_copy(task, "WARNING: STP = STPMAX", task_len, (ftnlen)21); } if (*stp == *stpmin && (*f > ftest || *g >= gtest)) { s_copy(task, "WARNING: STP = STPMIN", task_len, (ftnlen)21); } /* Test for convergence. */ if (*f <= ftest && ABS(*g) <= *gtol * (-ginit)) { s_copy(task, "CONVERGENCE", task_len, (ftnlen)11); } /* Test for termination. */ if (s_cmp(task, "WARN", (ftnlen)4, (ftnlen)4) == 0 || s_cmp(task, "CONV", (ftnlen)4, (ftnlen)4) == 0) { goto L10; } /* A modified function is used to predict the step during the */ /* first stage if a lower function value has been obtained but */ /* the decrease is not sufficient. */ if (stage == 1 && *f <= fx && *f > ftest) { /* Define the modified function and derivative values. */ fm = *f - *stp * gtest; fxm = fx - stx * gtest; fym = fy - sty * gtest; gm = *g - gtest; gxm = gx - gtest; gym = gy - gtest; /* Call dcstep to update stx, sty, and to compute the new step. */ dcstep(&stx, &fxm, &gxm, &sty, &fym, &gym, stp, &fm, &gm, &brackt, & stmin, &stmax); /* Reset the function and derivative values for f. */ fx = fxm + stx * gtest; fy = fym + sty * gtest; gx = gxm + gtest; gy = gym + gtest; } else { /* Call dcstep to update stx, sty, and to compute the new step. */ dcstep(&stx, &fx, &gx, &sty, &fy, &gy, stp, f, g, &brackt, &stmin, & stmax); } /* Decide if a bisection step is needed. */ if (brackt) { if ((d__1 = sty - stx, ABS(d__1)) >= width1 * .66) { *stp = stx + (sty - stx) * .5; } width1 = width; width = (d__1 = sty - stx, ABS(d__1)); } /* Set the minimum and maximum steps allowed for stp. */ if (brackt) { stmin = MIN(stx,sty); stmax = MAX(stx,sty); } else { stmin = *stp + (*stp - stx) * 1.1; stmax = *stp + (*stp - stx) * 4.; } /* Force the step to be within the bounds stpmax and stpmin. */ *stp = MAX(*stp,*stpmin); *stp = MIN(*stp,*stpmax); /* If further progress is not possible, let stp be the best */ /* point obtained during the search. */ if ((brackt && (*stp <= stmin || *stp >= stmax)) || (brackt && stmax - stmin <= *xtol * stmax)) { *stp = stx; } /* Obtain another function and derivative. */ s_copy(task, "FG", task_len, (ftnlen)2); L10: /* Save local variables. */ if (brackt) { isave[1] = 1; } else { isave[1] = 0; } isave[2] = stage; dsave[1] = ginit; dsave[2] = gtest; dsave[3] = gx; dsave[4] = gy; dsave[5] = finit; dsave[6] = fx; dsave[7] = fy; dsave[8] = stx; dsave[9] = sty; dsave[10] = stmin; dsave[11] = stmax; dsave[12] = width; dsave[13] = width1; return 0; } /* dcsrch */ /* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ /* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ /* Subroutine */ int dcstep(doublereal *stx, doublereal *fx, doublereal *dx, doublereal *sty, doublereal *fy, doublereal *dy, doublereal *stp, doublereal *fp, doublereal *dp, logical *brackt, doublereal *stpmin, doublereal *stpmax) { /* System generated locals */ doublereal d__1, d__2, d__3; /* Local variables */ doublereal sgnd, stpc, stpf, stpq, p, q, gamma, r__, s, theta; /* ********** */ /* Subroutine dcstep */ /* This subroutine computes a safeguarded step for a search */ /* procedure and updates an interval that contains a step that */ /* satisfies a sufficient decrease and a curvature condition. */ /* The parameter stx contains the step with the least function */ /* value. If brackt is set to .true. then a minimizer has */ /* been bracketed in an interval with endpoints stx and sty. */ /* The parameter stp contains the current step. */ /* The subroutine assumes that if brackt is set to .true. then */ /* MIN(stx,sty) < stp < MAX(stx,sty), */ /* and that the derivative at stx is negative in the direction */ /* of the step. */ /* The subroutine statement is */ /* subroutine dcstep(stx,fx,dx,sty,fy,dy,stp,fp,dp,brackt, */ /* stpmin,stpmax) */ /* where */ /* stx is a double precision variable. */ /* On entry stx is the best step obtained so far and is an */ /* endpoint of the interval that contains the minimizer. */ /* On exit stx is the updated best step. */ /* fx is a double precision variable. */ /* On entry fx is the function at stx. */ /* On exit fx is the function at stx. */ /* dx is a double precision variable. */ /* On entry dx is the derivative of the function at */ /* stx. The derivative must be negative in the direction of */ /* the step, that is, dx and stp - stx must have opposite */ /* signs. */ /* On exit dx is the derivative of the function at stx. */ /* sty is a double precision variable. */ /* On entry sty is the second endpoint of the interval that */ /* contains the minimizer. */ /* On exit sty is the updated endpoint of the interval that */ /* contains the minimizer. */ /* fy is a double precision variable. */ /* On entry fy is the function at sty. */ /* On exit fy is the function at sty. */ /* dy is a double precision variable. */ /* On entry dy is the derivative of the function at sty. */ /* On exit dy is the derivative of the function at the exit sty. */ /* stp is a double precision variable. */ /* On entry stp is the current step. If brackt is set to .true. */ /* then on input stp must be between stx and sty. */ /* On exit stp is a new trial step. */ /* fp is a double precision variable. */ /* On entry fp is the function at stp */ /* On exit fp is unchanged. */ /* dp is a double precision variable. */ /* On entry dp is the the derivative of the function at stp. */ /* On exit dp is unchanged. */ /* brackt is an logical variable. */ /* On entry brackt specifies if a minimizer has been bracketed. */ /* Initially brackt must be set to .false. */ /* On exit brackt specifies if a minimizer has been bracketed. */ /* When a minimizer is bracketed brackt is set to .true. */ /* stpmin is a double precision variable. */ /* On entry stpmin is a lower bound for the step. */ /* On exit stpmin is unchanged. */ /* stpmax is a double precision variable. */ /* On entry stpmax is an upper bound for the step. */ /* On exit stpmax is unchanged. */ /* MINPACK-1 Project. June 1983 */ /* Argonne National Laboratory. */ /* Jorge J. More' and David J. Thuente. */ /* MINPACK-2 Project. November 1993. */ /* Argonne National Laboratory and University of Minnesota. */ /* Brett M. Averick and Jorge J. More'. */ /* ********** */ sgnd = *dp * (*dx / ABS(*dx)); /* First case: A higher function value. The minimum is bracketed. */ /* If the cubic step is closer to stx than the quadratic step, the */ /* cubic step is taken, otherwise the average of the cubic and */ /* quadratic steps is taken. */ if (*fp > *fx) { theta = (*fx - *fp) * 3. / (*stp - *stx) + *dx + *dp; /* Computing MAX */ d__1 = ABS(theta), d__2 = ABS(*dx), d__1 = MAX(d__1,d__2), d__2 = ABS( *dp); s = MAX(d__1,d__2); /* Computing 2nd power */ d__1 = theta / s; gamma = s * sqrt(d__1 * d__1 - *dx / s * (*dp / s)); if (*stp < *stx) { gamma = -gamma; } p = gamma - *dx + theta; q = gamma - *dx + gamma + *dp; r__ = p / q; stpc = *stx + r__ * (*stp - *stx); stpq = *stx + *dx / ((*fx - *fp) / (*stp - *stx) + *dx) / 2. * (*stp - *stx); if ((d__1 = stpc - *stx, ABS(d__1)) < (d__2 = stpq - *stx, ABS(d__2))) { stpf = stpc; } else { stpf = stpc + (stpq - stpc) / 2.; } *brackt = TRUE_; /* Second case: A lower function value and derivatives of opposite */ /* sign. The minimum is bracketed. If the cubic step is farther from */ /* stp than the secant step, the cubic step is taken, otherwise the */ /* secant step is taken. */ } else if (sgnd < 0.) { theta = (*fx - *fp) * 3. / (*stp - *stx) + *dx + *dp; /* Computing MAX */ d__1 = ABS(theta), d__2 = ABS(*dx), d__1 = MAX(d__1,d__2), d__2 = ABS( *dp); s = MAX(d__1,d__2); /* Computing 2nd power */ d__1 = theta / s; gamma = s * sqrt(d__1 * d__1 - *dx / s * (*dp / s)); if (*stp > *stx) { gamma = -gamma; } p = gamma - *dp + theta; q = gamma - *dp + gamma + *dx; r__ = p / q; stpc = *stp + r__ * (*stx - *stp); stpq = *stp + *dp / (*dp - *dx) * (*stx - *stp); if ((d__1 = stpc - *stp, ABS(d__1)) > (d__2 = stpq - *stp, ABS(d__2))) { stpf = stpc; } else { stpf = stpq; } *brackt = TRUE_; /* Third case: A lower function value, derivatives of the same sign, */ /* and the magnitude of the derivative decreases. */ } else if (ABS(*dp) < ABS(*dx)) { /* The cubic step is computed only if the cubic tends to infinity */ /* in the direction of the step or if the minimum of the cubic */ /* is beyond stp. Otherwise the cubic step is defined to be the */ /* secant step. */ theta = (*fx - *fp) * 3. / (*stp - *stx) + *dx + *dp; /* Computing MAX */ d__1 = ABS(theta), d__2 = ABS(*dx), d__1 = MAX(d__1,d__2), d__2 = ABS( *dp); s = MAX(d__1,d__2); /* The case gamma = 0 only arises if the cubic does not tend */ /* to infinity in the direction of the step. */ /* Computing MAX */ /* Computing 2nd power */ d__3 = theta / s; d__1 = 0., d__2 = d__3 * d__3 - *dx / s * (*dp / s); gamma = s * sqrt((MAX(d__1,d__2))); if (*stp > *stx) { gamma = -gamma; } p = gamma - *dp + theta; q = gamma + (*dx - *dp) + gamma; r__ = p / q; if (r__ < 0. && gamma != 0.) { stpc = *stp + r__ * (*stx - *stp); } else if (*stp > *stx) { stpc = *stpmax; } else { stpc = *stpmin; } stpq = *stp + *dp / (*dp - *dx) * (*stx - *stp); if (*brackt) { /* A minimizer has been bracketed. If the cubic step is */ /* closer to stp than the secant step, the cubic step is */ /* taken, otherwise the secant step is taken. */ if ((d__1 = stpc - *stp, ABS(d__1)) < (d__2 = stpq - *stp, ABS( d__2))) { stpf = stpc; } else { stpf = stpq; } if (*stp > *stx) { /* Computing MIN */ d__1 = *stp + (*sty - *stp) * .66; stpf = MIN(d__1,stpf); } else { /* Computing MAX */ d__1 = *stp + (*sty - *stp) * .66; stpf = MAX(d__1,stpf); } } else { /* A minimizer has not been bracketed. If the cubic step is */ /* farther from stp than the secant step, the cubic step is */ /* taken, otherwise the secant step is taken. */ if ((d__1 = stpc - *stp, ABS(d__1)) > (d__2 = stpq - *stp, ABS( d__2))) { stpf = stpc; } else { stpf = stpq; } stpf = MIN(*stpmax,stpf); stpf = MAX(*stpmin,stpf); } /* Fourth case: A lower function value, derivatives of the same sign, */ /* and the magnitude of the derivative does not decrease. If the */ /* minimum is not bracketed, the step is either stpmin or stpmax, */ /* otherwise the cubic step is taken. */ } else { if (*brackt) { theta = (*fp - *fy) * 3. / (*sty - *stp) + *dy + *dp; /* Computing MAX */ d__1 = ABS(theta), d__2 = ABS(*dy), d__1 = MAX(d__1,d__2), d__2 = ABS(*dp); s = MAX(d__1,d__2); /* Computing 2nd power */ d__1 = theta / s; gamma = s * sqrt(d__1 * d__1 - *dy / s * (*dp / s)); if (*stp > *sty) { gamma = -gamma; } p = gamma - *dp + theta; q = gamma - *dp + gamma + *dy; r__ = p / q; stpc = *stp + r__ * (*sty - *stp); stpf = stpc; } else if (*stp > *stx) { stpf = *stpmax; } else { stpf = *stpmin; } } /* Update the interval which contains a minimizer. */ if (*fp > *fx) { *sty = *stp; *fy = *fp; *dy = *dp; } else { if (sgnd < 0.) { *sty = *stx; *fy = *fx; *dy = *dx; } *stx = *stp; *fx = *fp; *dx = *dp; } /* Compute the new step. */ *stp = stpf; return 0; } /* dcstep */ mpb-1.5/src/matrices/blasglue.c0000644000175400001440000002221212315341423013413 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* Glue code to make the interface to BLAS routines more C-like. These routines take care of translating between C and Fortran argument conventions, including array formats--the C code can call these routines using ordinary row-major convention, and the arguments will be translated to Fortran's column-major format automatically. (No data movement is required for this.) Note that, where in Fortran you pass the leading dimension ("ld") of each array to the routines, in C (here) we pass the final dimension ("fd") of each array. This code also automatically selects the right version of the BLAS routines, depending upon which data type is defined in scalar.h. */ /* This file also includes similar glue code for some LAPACK routines. */ /*************************************************************************/ #include #include #include "config.h" #include #include "blasglue.h" #include "scalar.h" /*************************************************************************/ /* Define a macro F(x,X) that works similarly to the F77_FUNC macro except that it appends an appropriate BLAS prefix (c,z,s,d) to the routine name depending upon the type defined in scalar.h */ #ifdef SCALAR_COMPLEX # ifdef SCALAR_SINGLE_PREC # define F(x,X) F77_FUNC(c##x, C##X) # else # define F(x,X) F77_FUNC(z##x, Z##X) # endif #else # ifdef SCALAR_SINGLE_PREC # define F(x,X) F77_FUNC(s##x, S##X) # else # define F(x,X) F77_FUNC(d##x, D##X) # endif #endif /* FR(x,X) is for functions where we always pass real arguments, even when SCALAR_COMPLEX is defined. */ #ifdef SCALAR_SINGLE_PREC # define FR(x,X) F77_FUNC(s##x, S##X) #else # define FR(x,X) F77_FUNC(d##x, D##X) #endif /*************************************************************************/ /* Prototypes for BLAS and LAPACK functions. Note that we need to wrap these in extern "C" if this is compiled under C++, or all hell will break loose. (i.e. C++'s name munging will conflict with Fortran's.) */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ extern void F(axpy,AXPY) (int *, scalar *, scalar *, int *, scalar *, int *); extern void F(scal,SCAL) (int *, scalar *, scalar *, int *); extern void F(copy,COPY) (int *, scalar *, int *, scalar *, int *); extern scalar F(dotc,DOTC) (int *, scalar *, int *, scalar *, int *); extern scalar F(dot,DOT) (int *, scalar *, int *, scalar *, int *); extern void F(gemm,GEMM) (char *, char *, int *, int *, int *, scalar *, scalar *, int *, scalar *, int *, scalar *, scalar *, int *); extern void F(herk,HERK) (char *, char *, int *, int *, real *, scalar *, int *, real *, scalar *, int *); extern void F(syrk,SYRK) (char *, char *, int *, int *, real *, scalar *, int *, real *, scalar *, int *); extern void F(potrf,POTRF) (char *, int *, scalar *, int *, int *); extern void F(potri,POTRI) (char *, int *, scalar *, int *, int *); extern void F(hetrf,HETRF) (char *, int *, scalar *, int *, int *, scalar *, int *, int *); extern void F(hetri,HETRI) (char *, int *, scalar *, int *, int *, scalar *, int *); extern void F(sytrf,SYTRF) (char *, int *, scalar *, int *, int *, scalar *, int *, int *); extern void F(sytri,SYTRI) (char *, int *, scalar *, int *, int *, scalar *, int *); extern void F(heev,HEEV) (char *, char *, int *, scalar *, int *, real *, scalar *, int *, real *, int *); extern void FR(syev,SYEV) (char *, char *, int *, real *, int *, real *, real *, int *, int *); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ /*************************************************************************/ void blasglue_axpy(int n, real a, scalar *x, int incx, scalar *y, int incy) { scalar alpha; ASSIGN_REAL(alpha, a); F(axpy,AXPY) (&n, &alpha, x, &incx, y, &incy); } void blasglue_scal(int n, scalar a, scalar *x, int incx) { F(scal,SCAL) (&n, &a, x, &incx); } void blasglue_rscal(int n, real a, scalar *x, int incx) { scalar alpha; ASSIGN_REAL(alpha, a); F(scal,SCAL) (&n, &alpha, x, &incx); } void blasglue_copy(int n, scalar *x, int incx, scalar *y, int incy) { F(copy,COPY) (&n, x, &incx, y, &incy); } scalar blasglue_dotc(int n, scalar *x, int incx, scalar *y, int incy) { #ifndef NO_FORTRAN_FUNCTIONS # ifdef SCALAR_COMPLEX return (F(dotc,DOTC) (&n, x, &incx, y, &incy)); # else return (F(dot,DOT) (&n, x, &incx, y, &incy)); # endif #else /* on some machines, return values from Fortran functions don't work */ int i; scalar sum = SCALAR_INIT_ZERO; for (i = 0; i < n; ++i) { # ifdef SCALAR_COMPLEX real x_re = x[i*incx].re, x_im = x[i*incx].im; real y_re = y[i*incy].re, y_im = y[i*incy].im; /* the dot product is conj(x) * y: */ sum.re += x_re * y_re + x_im * y_im; sum.im += x_re * y_im - x_im * y_re; # else sum += x[i*incx] * y[i*incy]; # endif } return sum; #endif } void blasglue_gemm(char transa, char transb, int m, int n, int k, real a, scalar *A, int fdA, scalar *B, int fdB, real b, scalar *C, int fdC) { scalar alpha, beta; if (m*n == 0) return; if (k == 0) { int i, j; for (i = 0; i < m; ++i) for (j = 0; j < n; ++j) ASSIGN_ZERO(C[i*fdC + j]); return; } CHECK(A != C && B != C, "gemm output array must be distinct"); ASSIGN_REAL(alpha,a); ASSIGN_REAL(beta,b); F(gemm,GEMM) (&transb, &transa, &n, &m, &k, &alpha, B, &fdB, A, &fdA, &beta, C, &fdC); } void blasglue_herk(char uplo, char trans, int n, int k, real a, scalar *A, int fdA, real b, scalar *C, int fdC) { if (n == 0) return; if (k == 0) { int i, j; for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) ASSIGN_ZERO(C[i*fdC + j]); return; } CHECK(A != C, "herk output array must be distinct"); uplo = uplo == 'U' ? 'L' : 'U'; trans = (trans == 'C' || trans == 'T') ? 'N' : 'C'; #ifdef SCALAR_COMPLEX F(herk,HERK) (&uplo, &trans, &n, &k, &a, A, &fdA, &b, C, &fdC); #else F(syrk,SYRK) (&uplo, &trans, &n, &k, &a, A, &fdA, &b, C, &fdC); #endif } /*************************************************************************/ #ifndef NO_LAPACK int lapackglue_potrf(char uplo, int n, scalar *A, int fdA) { int info; uplo = uplo == 'U' ? 'L' : 'U'; F(potrf,POTRF) (&uplo, &n, A, &fdA, &info); CHECK(info >= 0, "invalid argument in potrf"); return (info == 0); } int lapackglue_potri(char uplo, int n, scalar *A, int fdA) { int info; uplo = uplo == 'U' ? 'L' : 'U'; F(potri,POTRI) (&uplo, &n, A, &fdA, &info); CHECK(info >= 0, "invalid argument in potri"); return (info == 0); } int lapackglue_hetrf(char uplo, int n, scalar *A, int fdA, int *ipiv, scalar *work, int lwork) { int info; uplo = uplo == 'U' ? 'L' : 'U'; #ifdef SCALAR_COMPLEX F(hetrf,HETRF) (&uplo, &n, A, &fdA, ipiv, work, &lwork, &info); #else F(sytrf,SYTRF) (&uplo, &n, A, &fdA, ipiv, work, &lwork, &info); #endif CHECK(info >= 0, "invalid argument in hetrf"); return (info == 0); } int lapackglue_hetri(char uplo, int n, scalar *A, int fdA, int *ipiv, scalar *work) { int info; uplo = uplo == 'U' ? 'L' : 'U'; #ifdef SCALAR_COMPLEX F(hetri,HETRI) (&uplo, &n, A, &fdA, ipiv, work, &info); #else F(sytri,SYTRI) (&uplo, &n, A, &fdA, ipiv, work, &info); #endif CHECK(info >= 0, "invalid argument in hetri"); return (info == 0); } void lapackglue_heev(char jobz, char uplo, int n, scalar *A, int fdA, real *w, scalar *work, int lwork, real *rwork) { int info; uplo = uplo == 'U' ? 'L' : 'U'; #ifdef SCALAR_COMPLEX F(heev,HEEV) (&jobz, &uplo, &n, A, &fdA, w, work, &lwork, rwork, &info); #else (void) rwork; /* unused */ F(syev,SYEV) (&jobz, &uplo, &n, A, &fdA, w, work, &lwork, &info); #endif CHECK(info >= 0, "invalid argument in heev"); CHECK(info <= 0, "failure to converge in heev"); } void lapackglue_syev(char jobz, char uplo, int n, real *A, int fdA, real *w, real *work, int lwork) { int info; uplo = uplo == 'U' ? 'L' : 'U'; FR(syev,SYEV) (&jobz, &uplo, &n, A, &fdA, w, work, &lwork, &info); CHECK(info >= 0, "invalid argument in heev"); CHECK(info <= 0, "failure to converge in heev"); } #endif mpb-1.5/src/matrices/matrices.c0000644000175400001440000001172112315341423013427 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include "config.h" #include #include "matrices.h" /* Basic operations: allocation, deallocation, etcetera. */ evectmatrix create_evectmatrix(int N, int c, int p, int localN, int Nstart, int allocN) { evectmatrix X; CHECK(localN <= N && allocN >= localN && Nstart < N, "invalid N arguments"); X.N = N; X.localN = localN; X.Nstart = Nstart; X.allocN = allocN; X.c = c; X.n = localN * c; X.alloc_p = X.p = p; if (allocN > 0) { CHK_MALLOC(X.data, scalar, allocN * c * p); } else X.data = NULL; return X; } void destroy_evectmatrix(evectmatrix X) { free(X.data); } sqmatrix create_sqmatrix(int p) { sqmatrix X; X.alloc_p = X.p = p; if (p > 0) { CHK_MALLOC(X.data, scalar, p * p); } else X.data = (scalar*) NULL; return X; } void destroy_sqmatrix(sqmatrix X) { free(X.data); } /***********************************************************************/ /* a few general matrix operations for diagonal matrices; these will be used both by evectmatrix and sqmatrix routines: */ /* compute diag = diagonal elements of Xt * Y, where X and Y are n x p. */ void matrix_XtY_diag(scalar *X, scalar *Y, int n, int p, scalar *diag) { int i, j; for (j = 0; j < p; ++j) { ASSIGN_ZERO(diag[j]); } for (i = 0; i < n; ++i) for (j = 0; j < p; ++j) { ACCUMULATE_SUM_CONJ_MULT(diag[j], X[i*p+j], Y[i*p+j]); } } /* compute diag = diagonal elements of Re[Xt * Y], where X and Y are n x p. */ void matrix_XtY_diag_real(scalar *X, scalar *Y, int n, int p, real *diag) { int i, j; for (j = 0; j < p; ++j) { diag[j] = 0; } for (i = 0; i < n; ++i) for (j = 0; j < p; ++j) { diag[j] += (SCALAR_RE(X[i*p+j]) * SCALAR_RE(Y[i*p+j]) + SCALAR_IM(X[i*p+j]) * SCALAR_IM(Y[i*p+j])); } } /* compute diag = diagonal elements of Xt * X, where X is n x p. */ void matrix_XtX_diag_real(scalar *X, int n, int p, real *diag) { int i, j; for (j = 0; j < p; ++j) { diag[j] = 0; } for (i = 0; i < n; ++i) for (j = 0; j < p; ++j) { ACCUMULATE_SUM_SQ(diag[j], X[i*p+j]); } } /* compute X += a * Y * diag(diag), where X and Y are n x p */ void matrix_XpaY_diag(scalar *X, real a, scalar *Y, scalar *diag, int n, int p) { int i, j; for (i = 0; i < n; ++i) { for (j = 0; j < p; ++j) { scalar c; ASSIGN_MULT(c, Y[i*p+j], diag[j]); ASSIGN_SCALAR(X[i*p+j], SCALAR_RE(X[i*p+j]) + a * SCALAR_RE(c), SCALAR_IM(X[i*p+j]) + a * SCALAR_IM(c)); } } } /* compute X += a * Y * diag(diag), where X and Y are n x p and diag is real */ void matrix_XpaY_diag_real(scalar *X, real a, scalar *Y, real *diag, int n, int p) { int i, j; for (i = 0; i < n; ++i) { for (j = 0; j < p; ++j) { real d = a * diag[j]; ASSIGN_SCALAR(X[i*p+j], SCALAR_RE(X[i*p+j]) + d * SCALAR_RE(Y[i*p+j]), SCALAR_IM(X[i*p+j]) + d * SCALAR_IM(Y[i*p+j])); } } } /* compute X = X * diag1 + Y * diag2, where X and Y are n x p and diag1 and diag2 are real diagonal matrices */ void matrix_X_diag_real_pY_diag_real(scalar *X, real *diag1, scalar *Y, real *diag2, int n, int p) { int i, j; for (i = 0; i < n; ++i) { for (j = 0; j < p; ++j) { real d1 = diag1[j], d2 = diag2[j]; ASSIGN_SCALAR(X[i*p+j], d1 * SCALAR_RE(X[i*p+j]) + d2 * SCALAR_RE(Y[i*p+j]), d1 * SCALAR_IM(X[i*p+j]) + d2 * SCALAR_IM(Y[i*p+j])); } } } /* compute Re [ trace A * diag(diag) ], where A is p by p. */ real matrix_re_trace_A_diag_real(scalar *A, real *diag, int p) { real trace = 0.0; int i; for (i = 0; i < p; ++i) trace += SCALAR_RE(A[i*(p+1)]) * diag[i]; return trace; } scalar matrix_diag_trace(scalar *diag, int p) { scalar trace = SCALAR_INIT_ZERO; int i; for (i = 0; i < p; ++i) { ACCUMULATE_SUM(trace, diag[i]); } return trace; } real matrix_diag_real_trace(real *diag, int p) { real trace = 0.0; int i; for (i = 0; i < p; ++i) trace += diag[i]; return trace; } mpb-1.5/src/matrices/linmin.c0000644000175400001440000000633112315341423013107 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* Nice C wrappers around minpack2-linmin.c functions. */ #include #include #include "config.h" #include #include #include "linmin.h" #define double linmin_real extern int dcsrch(double *stp, double *f, double *g, double *ftol, double *gtol, double *xtol, char *task, double *stpmin, double *stpmax, int *isave, double *dsave); /* Our line minimization algorithm is designed only for f(x) for x >= 0. If the minimum lies for negative x, we use reverse_func below to transform f(x) into f(-x). */ typedef struct { linmin_func f; void *f_data; } linmin_func_data; double reverse_func(double x, double *deriv, void *data) { linmin_func_data *d = (linmin_func_data *) data; double val; val = d->f(-x, deriv, d->f_data); *deriv = -*deriv; return val; } double linmin(double *converged_f, double *converged_df, double x_guess, double f_0, double df_0, double f_tol, double df_tol, double x_tol, double x_min, double x_max, linmin_func f, void *f_data, int verbose) { if (df_0 > 0) { /* minimum lies for negative x; transform to f(-x) */ linmin_func_data d; double x; d.f = f; d.f_data = f_data; x = linmin(converged_f, converged_df, -x_guess, f_0, -df_0, f_tol, df_tol, x_tol, -x_min, -x_max, reverse_func, &d, verbose); *converged_df = -*converged_df; return(-x); } else if (df_0 == 0) { /* already at minimum! */ *converged_f = f_0; *converged_df = df_0; return 0; } else { char task[300] = "START"; int isave[2]; double dsave[13], x, f_x, df_x; int iters = 0; x = x_guess; f_x = f_0; df_x = df_0; /* initially, pass in f and df at x=0 */ dcsrch(&x, &f_x, &df_x, &f_tol, &df_tol, &x_tol, task, &x_min, &x_max, isave, dsave); while (*task == 'F') { f_x = f(x, &df_x, f_data); mpi_assert_equal(x); mpi_assert_equal(f_x); ++iters; dcsrch(&x, &f_x, &df_x, &f_tol, &df_tol, &x_tol, task, &x_min, &x_max, isave, dsave); } if (*task != 'C') { /* not converged; warning or error */ if (verbose || *task == 'E') mpi_one_fprintf(stderr, "linmin: %s\n", task); CHECK(*task != 'E', "linmin failure"); } if (verbose) mpi_one_printf(" linmin: converged after %d iterations.\n", iters); *converged_f = f_x; *converged_df = df_x; return x; } } mpb-1.5/src/matrices/README0000644000175400001440000000246212315323744012344 00000000000000In this directory are datatypes and subroutines to handle matrix types and operations common to iterative block eigensolver algorithms. The block eigensolver algorithm itself is implemented in eigensolver.c. Such algorithms solve for the first p eigenstates of an n x n (sparse) matrix A. This corresponds to minimizing Yt*A*Y under the constraint Yt*Y==1, where Y is an n x p matrix whose columns are the eigenvectors and Yt is its adjoint. The components of Y are, in general, complex vectors of length c. We define two datatypes: evectmatrix -- An (N x c) x p matrix (row-major) whose columns are the eigenvects. n = localN*c rows are stored local to the current process. sqmatrix -- a p x p matrix. These are typically used to hold things like Yt*Y. The main reason for having two separate datatypes is that, on a parallel machine, evectmatrix's are distributed while sqmatrix's are not. (In particular, evectmatrix's are distributed across their rows.) Various operations are defined on these matrices (multiplication, a X + Y, etcetera, typically using BLAS routines internally). The sqmatrix type also has operations like (dense) inversion and diagonalization (based on LAPACK). Together, these operations can be used to easily implement most eigensolver algorithms. mpb-1.5/src/matrices/eigensolver_utils.c0000644000175400001440000000637312315341423015371 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include #include #include "eigensolver.h" /**************************************************************************/ void eigensolver_get_eigenvals_aux(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectmatrix Work1, evectmatrix Work2, sqmatrix U, sqmatrix Usqrt, sqmatrix Uwork) { sqmatrix_sqrt(Usqrt, U, Uwork); /* Usqrt = 1/sqrt(Yt*Y) */ evectmatrix_XeYS(Work1, Y, Usqrt, 1); /* Work1 = orthornormalize(Y) */ A(Work1, Work2, Adata, 1, Y); /* Work2 = A Work1; Y is scratch */ evectmatrix_XtY(U, Work1, Work2, Uwork); /* U = Work1 * A * Work1 */ sqmatrix_eigensolve(U, eigenvals, Uwork); evectmatrix_XeYS(Y, Work1, U, 1); } void eigensolver_get_eigenvals(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectmatrix Work1, evectmatrix Work2) { sqmatrix U, Usqrt, Uwork; U = create_sqmatrix(Y.p); Usqrt = create_sqmatrix(Y.p); Uwork = create_sqmatrix(Y.p); evectmatrix_XtX(U, Y, Uwork); sqmatrix_invert(U, 1, Uwork); eigensolver_get_eigenvals_aux(Y, eigenvals, A, Adata, Work1, Work2, U, Usqrt, Uwork); destroy_sqmatrix(U); destroy_sqmatrix(Usqrt); destroy_sqmatrix(Uwork); } /**************************************************************************/ /* Subroutines for chaining constraints, to make it easy to pass multiple constraint functions to the eigensolver: */ evectconstraint_chain *evect_add_constraint(evectconstraint_chain *constraints, evectconstraint C, void *constraint_data) { evectconstraint_chain *new_constraints; CHK_MALLOC(new_constraints, evectconstraint_chain, 1); new_constraints->C = C; new_constraints->constraint_data = constraint_data; new_constraints->next = constraints; return new_constraints; } void evect_destroy_constraints(evectconstraint_chain *constraints) { while (constraints) { evectconstraint_chain *cur_constraint = constraints; constraints = constraints->next; free(cur_constraint); } } void evectconstraint_chain_func(evectmatrix X, void *data) { evectconstraint_chain *constraints = (evectconstraint_chain *) data; while (constraints) { if (constraints->C) constraints->C(X, constraints->constraint_data); constraints = constraints->next; } } mpb-1.5/src/matrices/evectmatrix.c0000644000175400001440000002157412315341423014162 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include "matrices.h" #include "blasglue.h" double evectmatrix_flops = 0; /* Operations on evectmatrix blocks: X + a Y, X * S, X + a Y * S, Xt * X, Xt * Y, trace(Xt * Y), etc. (X, Y: evectmatrix, S: sqmatrix) */ /* X = Y */ void evectmatrix_copy(evectmatrix X, evectmatrix Y) { CHECK(X.n == Y.n && X.p == Y.p, "arrays not conformant"); blasglue_copy(X.n * X.p, Y.data, 1, X.data, 1); } /* set p selected columns of X to those in Y, starting at ix and iy. */ void evectmatrix_copy_slice(evectmatrix X, evectmatrix Y, int ix, int iy, int p) { CHECK(ix + p <= X.p && iy + p <= Y.p && ix >= 0 && iy >= 0 && X.n == Y.n, "invalid arguments to evectmatrix_copy_slice"); if (ix == 0 && iy == 0 && p == X.p && p == Y.p) evectmatrix_copy(X, Y); else if (p == 1) blasglue_copy(X.n, Y.data + iy, Y.p, X.data + ix, X.p); else { int i; for (i = 0; i < X.n; ++i) blasglue_copy(p, Y.data + iy + i * Y.p, 1, X.data + ix + i * X.p, 1); } } /* Resize A from its current size to an nxp matrix, assuming that A was initially allocated to hold at least this big a matrix. If preserve_data is nonzero, copies the existing data in A (or a subset of it, if the matrix is shrinking) to the corresponding entries of the resized matrix. */ void evectmatrix_resize(evectmatrix *A, int p, short preserve_data) { CHECK(p <= A->alloc_p, "tried to resize beyond allocated limit"); if (preserve_data) { int i, j; if (p < A->p) { for (i = 0; i < A->n; ++i) for (j = 0; j < p; ++j) A->data[i*p + j] = A->data[i*A->p + j]; } else { for (i = A->n-1; i >= 0; --i) for (j = A->p-1; j >= 0; --j) A->data[i*p + j] = A->data[i*A->p + j]; } } A->p = p; } /* compute X = a*X + b*Y; X and Y may be equal. */ void evectmatrix_aXpbY(real a, evectmatrix X, real b, evectmatrix Y) { CHECK(X.n == Y.n && X.p == Y.p, "arrays not conformant"); if (a != 1.0) blasglue_rscal(X.n * X.p, a, X.data, 1); blasglue_axpy(X.n * X.p, b, Y.data, 1, X.data, 1); evectmatrix_flops += X.N * X.c * X.p * 3; } /* Compute X = a*X + b*Y*S. Instead of using the entire S matrix, however, we use only a Y.p x Y.p submatrix, beginning at the element indexed by Soffset. If sdagger != 0, then the adjoint of the submatrix is used instead of the submatrix. */ void evectmatrix_aXpbYS_sub(real a, evectmatrix X, real b, evectmatrix Y, sqmatrix S, int Soffset, short sdagger) { if (S.p == 0) /* we treat the S.p == 0 case as if S were the identity */ evectmatrix_aXpbY(a, X, b, Y); else { CHECK(X.n == Y.n && X.p == Y.p && X.p <= S.p, "arrays not conformant"); CHECK(Soffset + (Y.p-1)*S.p + Y.p <= S.p*S.p, "submatrix exceeds matrix bounds"); blasglue_gemm('N', sdagger ? 'C' : 'N', X.n, X.p, X.p, b, Y.data, Y.p, S.data + Soffset, S.p, a, X.data, X.p); evectmatrix_flops += X.N * X.c * X.p * (3 + 2 * X.p); } } /* compute X = YS. If sherm != 0, then S is assumed to be Hermitian. This can be used to make the multiplication more efficient. */ void evectmatrix_XeYS(evectmatrix X, evectmatrix Y, sqmatrix S, short sherm) { CHECK(S.p == 0 || S.p == Y.p, "arrays not conformant"); evectmatrix_aXpbYS_sub(0.0, X, 1.0, Y, S, 0, sherm); } /* compute X += a Y * S. If sdagger != 0, then St is used instead of S. */ void evectmatrix_XpaYS(evectmatrix X, real a, evectmatrix Y, sqmatrix S, short sdagger) { CHECK(S.p == 0 || S.p == Y.p, "arrays not conformant"); evectmatrix_aXpbYS_sub(1.0, X, a, Y, S, 0, sdagger); } /* compute U = adjoint(X) * X, with S a scratch matrix. */ void evectmatrix_XtX(sqmatrix U, evectmatrix X, sqmatrix S) { CHECK(X.p == U.p && U.p <= S.alloc_p, "matrices not conformant"); /* blasglue_gemm('C', 'N', X.p, X.p, X.n, 1.0, X.data, X.p, X.data, X.p, 0.0, S.data, U.p); */ /* take advantage of the fact that U is Hermitian and only write out the upper triangle of the matrix */ memset(S.data, 0, sizeof(scalar) * (U.p * U.p)); blasglue_herk('U', 'C', X.p, X.n, 1.0, X.data, X.p, 0.0, S.data, U.p); evectmatrix_flops += X.N * X.c * X.p * (X.p - 1); /* Now, copy the conjugate of the upper half onto the lower half of S */ { int i, j; for (i = 0; i < U.p; ++i) for (j = i + 1; j < U.p; ++j) { ASSIGN_CONJ(S.data[j * U.p + i], S.data[i * U.p + j]); } } mpi_allreduce(S.data, U.data, U.p * U.p * SCALAR_NUMVALS, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); } /* Dot p selected columns of X with those in Y, starting at ix and iy. Stores the result in U, with S a scratch matrix. */ void evectmatrix_XtY_slice(sqmatrix U, evectmatrix X, evectmatrix Y, int ix, int iy, int p, sqmatrix S) { CHECK(ix + p <= X.p && iy + p <= Y.p && ix >= 0 && iy >= 0 && X.n == Y.n && p == U.p && p <= S.alloc_p, "invalid arguments to XtY_slice"); memset(S.data, 0, sizeof(scalar) * (U.p * U.p)); blasglue_gemm('C', 'N', p, p, X.n, 1.0, X.data + ix, X.p, Y.data + iy, Y.p, 0.0, S.data, U.p); evectmatrix_flops += X.N * X.c * p * (2*p); mpi_allreduce(S.data, U.data, U.p * U.p * SCALAR_NUMVALS, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); } /* compute U = adjoint(X) * Y, with S a scratch matrix. */ void evectmatrix_XtY(sqmatrix U, evectmatrix X, evectmatrix Y, sqmatrix S) { CHECK(X.p == Y.p, "matrices not conformant"); evectmatrix_XtY_slice(U, X, Y, 0, 0, X.p, S); } /* Compute adjoint(X) * Y, storing the result in U at an offset Uoffset with the matrix (i.e. as a submatrix within U). S is a scratch matrix (at least Y.p by Y.p). */ void evectmatrixXtY_sub(sqmatrix U, int Uoffset, evectmatrix X, evectmatrix Y, sqmatrix S) { int i; CHECK(X.p == Y.p && X.n == Y.n && U.p >= Y.p, "matrices not conformant"); CHECK(Uoffset + (Y.p-1)*U.p + Y.p <= U.p*U.p, "submatrix exceeds matrix bounds"); CHECK(Y.p <= S.alloc_p, "scratch matrix too small"); memset(S.data, 0, sizeof(scalar) * (Y.p * Y.p)); blasglue_gemm('C', 'N', X.p, X.p, X.n, 1.0, X.data, X.p, Y.data, Y.p, 0.0, S.data, Y.p); evectmatrix_flops += X.N * X.c * X.p * (2*X.p); for (i = 0; i < Y.p; ++i) { mpi_allreduce(S.data + i*Y.p, U.data + Uoffset + i*U.p, Y.p * SCALAR_NUMVALS, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); } } /* Compute only the diagonal elements of XtY, storing in diag (with scratch_diag a scratch array of the same size as diag). */ void evectmatrix_XtY_diag(evectmatrix X, evectmatrix Y, scalar *diag, scalar *scratch_diag) { matrix_XtY_diag(X.data, Y.data, X.n, X.p, scratch_diag); evectmatrix_flops += X.N * X.c * X.p * 2; mpi_allreduce(scratch_diag, diag, X.p * SCALAR_NUMVALS, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); } /* As above, but only compute real parts of diagonal. */ void evectmatrix_XtY_diag_real(evectmatrix X, evectmatrix Y, real *diag, real *scratch_diag) { matrix_XtY_diag_real(X.data, Y.data, X.n, X.p, scratch_diag); evectmatrix_flops += X.N * X.c * X.p * (2*X.p); mpi_allreduce(scratch_diag, diag, X.p, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); } /* As above, but compute only the diagonal elements of XtX. */ void evectmatrix_XtX_diag_real(evectmatrix X, real *diag, real *scratch_diag) { matrix_XtX_diag_real(X.data, X.n, X.p, scratch_diag); evectmatrix_flops += X.N * X.c * X.p * (2*X.p); mpi_allreduce(scratch_diag, diag, X.p, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); } /* compute trace(adjoint(X) * Y) */ scalar evectmatrix_traceXtY(evectmatrix X, evectmatrix Y) { scalar trace, trace_scratch; CHECK(X.p == Y.p && X.n == Y.n, "matrices not conformant"); trace_scratch = blasglue_dotc(X.n * X.p, X.data, 1, Y.data, 1); evectmatrix_flops += X.N * X.c * X.p * (2*X.p) + X.p; mpi_allreduce(&trace_scratch, &trace, SCALAR_NUMVALS, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); return trace; } mpb-1.5/src/matrices/eigensolver_davidson.c0000644000175400001440000001661012315341423016033 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* This file contains an alternative eigensolver, currently experimental, based on the Davidson method (a preconditioned variant of Lanczos): M. Crouzeix, B. Philippe, and M. Sadkane, "The Davidson Method," SIAM J. Sci. Comput. 15, no. 1, pp. 62-76 (January 1994). */ #include #include #include #include "config.h" #include #include #include #include #include #include #include "eigensolver.h" extern void eigensolver_get_eigenvals_aux(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectmatrix Work1, evectmatrix Work2, sqmatrix U, sqmatrix Usqrt, sqmatrix Uwork); #define STRINGIZEx(x) #x /* a hack so that we can stringize macro values */ #define STRINGIZE(x) STRINGIZEx(x) /**************************************************************************/ #define EIGENSOLVER_MAX_ITERATIONS 100000 #define FEEDBACK_TIME 4.0 /* elapsed time before we print progress feedback */ /**************************************************************************/ void eigensolver_davidson(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectpreconditioner K, void *Kdata, evectconstraint constraint, void *constraint_data, evectmatrix Work[], int nWork, real tolerance, int *num_iterations, int flags, real target) { int nbasis, q; evectmatrix *AV, *V; sqmatrix VAV, S, Swork, U, S2, S3, I; mpiglue_clock_t prev_feedback_time; int iteration = 0, ibasis = 0; real *eigenvals2, prev_E = 0; prev_feedback_time = MPIGLUE_CLOCK; #ifdef DEBUG flags |= EIGS_VERBOSE; #endif CHECK(nWork >= 4, "not enough workspace"); nbasis = nWork / 2; V = Work; AV = Work + nbasis; q = Y.p * nbasis; VAV = create_sqmatrix(q); S = create_sqmatrix(q); Swork = create_sqmatrix(q); sqmatrix_resize(&VAV, 0, 0); sqmatrix_resize(&S, 0, 0); sqmatrix_resize(&Swork, 0, 0); CHK_MALLOC(eigenvals2, real, q); U = create_sqmatrix(Y.p); S2 = create_sqmatrix(Y.p); S3 = create_sqmatrix(Y.p); I = create_sqmatrix(0); if (constraint) constraint(Y, constraint_data); evectmatrix_XtX(U, Y, S3); CHECK(sqmatrix_invert(U, 1, S3), "singular YtY at start"); sqmatrix_sqrt(S2, U, S3); /* S2 = 1/sqrt(Yt*Y) */ evectmatrix_XeYS(V[0], Y, S2, 1); /* V[0] = orthonormalize Y */ do { real E; int itarget, i; A(V[ibasis], AV[ibasis], Adata, 0, Y); q = Y.p * (ibasis + 1); sqmatrix_resize(&VAV, q, 1); sqmatrix_resize(&S, q, 0); sqmatrix_resize(&Swork, q, 0); for (i = 0; i <= ibasis; ++i) { evectmatrixXtY_sub(VAV, Y.p * (q * i + ibasis), V[i], AV[ibasis], S3); } sqmatrix_copy_upper2full(S, VAV); sqmatrix_eigensolve(S, eigenvals2, Swork); /* find index itarget of start of "window" around the target frequency : */ if (target == 0.0) /* not attempting targeted eigensolver */ itarget = 0; else { /* note that this technique seems to have convergence trouble */ for (itarget = 0; itarget + Y.p < q && fabs(target - eigenvals2[itarget]) > fabs(target - eigenvals2[itarget + Y.p]); ++itarget) ; } for (E = 0.0, i = 0; i < Y.p; ++i) { E += (eigenvals[i] = eigenvals2[itarget + i]); } mpi_assert_equal(E); /* compute Y = best eigenvectors */ for (i = 0; i <= ibasis; ++i) { evectmatrix_aXpbYS_sub(i ? 1.0 : 0.0, Y, 1.0, V[i], S, itarget * q + Y.p * i, 1); } if (iteration > 0 && mpi_is_master() && ((flags & EIGS_VERBOSE) || MPIGLUE_CLOCK_DIFF(MPIGLUE_CLOCK, prev_feedback_time) > FEEDBACK_TIME)) { printf(" iteration %4d: " "trace = %0.16g (%g%% change)\n", iteration, E, 200.0 * fabs(E - prev_E) / (fabs(E) + fabs(prev_E))); fflush(stdout); /* make sure output appears */ prev_feedback_time = MPIGLUE_CLOCK; /* reset feedback clock */ } if (iteration > 0 && fabs(E - prev_E) < tolerance * 0.5 * (fabs(E) + fabs(prev_E) + 1e-7)) break; /* convergence! hooray! */ /* compute new directions from residual & update basis: */ { int ibasis2 = (ibasis + 1) % nbasis; /* compute V[ibasis2] = AY */ #if 1 for (i = 0; i <= ibasis; ++i) { evectmatrix_aXpbYS_sub(i ? 1.0 : 0.0, V[ibasis2], 1.0, AV[i], S, itarget * q + Y.p * i, 1); } #else A(Y, V[ibasis2], Adata, 1, Y); #endif /* handle restart case: */ if (ibasis2 == 0) { evectmatrix_copy(AV[0], V[0]); evectmatrix_copy(V[0], Y); sqmatrix_resize(&VAV, Y.p, 0); evectmatrix_XtY(VAV, V[0], AV[0], S3); ibasis2 = 1; evectmatrix_copy(V[ibasis2], AV[0]); } /* V[ibasis2] = residual = AY - Y * eigenvals */ matrix_XpaY_diag_real(V[ibasis2].data, -1.0, Y.data, eigenvals, Y.n, Y.p); /* AV[ibasis2] = precondition V[ibasis2]: */ if (K != NULL) K(V[ibasis2], AV[ibasis2], Kdata, Y, eigenvals, I); else evectmatrix_copy(AV[ibasis2], V[ibasis2]); /* project by the constraints, if any: */ if (constraint) constraint(AV[ibasis2], constraint_data); /* orthogonalize against previous V: */ for (i = 0; i < ibasis2; ++i) { evectmatrix_XtY(U, V[i], AV[ibasis2], S3); evectmatrix_XpaYS(AV[ibasis2], -1.0, V[i], U, 0); } /* orthonormalize within itself: */ evectmatrix_XtX(U, AV[ibasis2], S3); CHECK(sqmatrix_invert(U, 1, S3), "non-independent AV subspace"); sqmatrix_sqrt(S2, U, S3); evectmatrix_XeYS(V[ibasis2], AV[ibasis2], S2, 1); ibasis = ibasis2; } prev_E = E; } while (++iteration < EIGENSOLVER_MAX_ITERATIONS); CHECK(iteration < EIGENSOLVER_MAX_ITERATIONS, "failure to converge after " STRINGIZE(EIGENSOLVER_MAX_ITERATIONS) " iterations"); evectmatrix_XtX(U, Y, S3); CHECK(sqmatrix_invert(U, 1, S3), "singular YtY at end"); eigensolver_get_eigenvals_aux(Y, eigenvals, A, Adata, V[0], AV[0], U, S3, S2); free(eigenvals2); destroy_sqmatrix(VAV); destroy_sqmatrix(S); destroy_sqmatrix(Swork); destroy_sqmatrix(U); destroy_sqmatrix(S2); destroy_sqmatrix(S3); destroy_sqmatrix(I); *num_iterations = iteration; } mpb-1.5/src/matrices/eigensolver.c0000644000175400001440000006750112315341423014151 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include #include #include #include #include "eigensolver.h" #include "linmin.h" extern void eigensolver_get_eigenvals_aux(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectmatrix Work1, evectmatrix Work2, sqmatrix U, sqmatrix Usqrt, sqmatrix Uwork); #define STRINGIZEx(x) #x /* a hack so that we can stringize macro values */ #define STRINGIZE(x) STRINGIZEx(x) #define K_PI 3.141592653589793238462643383279502884197 #define MIN2(a,b) ((a) < (b) ? (a) : (b)) #define MAX2(a,b) ((a) > (b) ? (a) : (b)) #if defined(SCALAR_LONG_DOUBLE_PREC) # define fabs fabsl # define cos cosl # define sin sinl # define sqrt sqrtl # define atan atanl # define atan2 atan2l #endif /* Evalutate op, and set t to the elapsed time (in seconds). */ #define TIME_OP(t, op) { \ mpiglue_clock_t xxx_time_op_start_time = MPIGLUE_CLOCK; \ { \ op; \ } \ (t) = MPIGLUE_CLOCK_DIFF(MPIGLUE_CLOCK, xxx_time_op_start_time); \ } /**************************************************************************/ #define EIGENSOLVER_MAX_ITERATIONS 100000 #define FEEDBACK_TIME 4.0 /* elapsed time before we print progress feedback */ /* Number of iterations after which to reset conjugate gradient direction to steepest descent. (Picked after some experimentation. Is there a better basis? Should this change with the problem size?) */ #define CG_RESET_ITERS 70 /* Threshold for trace(1/YtY) = trace(U) before we reorthogonalize: */ #define EIGS_TRACE_U_THRESHOLD 1e8 /**************************************************************************/ /* estimated times/iteration for different iteration schemes, based on the measure times for various operations and the operation counts: */ #define EXACT_LINMIN_TIME(t_AZ, t_KZ, t_ZtW, t_ZS, t_ZtZ, t_linmin) \ ((t_AZ)*2 + (t_KZ) + (t_ZtW)*4 + (t_ZS)*2 + (t_ZtZ)*2 + (t_linmin)) #define APPROX_LINMIN_TIME(t_AZ, t_KZ, t_ZtW, t_ZS, t_ZtZ) \ ((t_AZ)*2 + (t_KZ) + (t_ZtW)*2 + (t_ZS)*2 + (t_ZtZ)*2) /* Guess for the convergence slowdown factor due to the approximate line minimization. It is probably best to be conservative, as the exact line minimization is more reliable and we only want to abandon it if there is a big speed gain. */ #define APPROX_LINMIN_SLOWDOWN_GUESS 2.0 /* We also don't want to use the approximate line minimization if the exact line minimization makes a big difference in the value of the trace that's achieved (i.e. if one step of Newton's method on the trace derivative does not do a good job). The following is the maximum improvement by the exact line minimization (over one step of Newton) at which we'll allow the use of approximate line minimization. */ #define APPROX_LINMIN_IMPROVEMENT_THRESHOLD 0.05 /**************************************************************************/ typedef struct { sqmatrix YtAY, DtAD, symYtAD, YtY, DtD, symYtD, S1, S2, S3; real lag, d_lag, trace_YtLY, trace_DtLD, trace_YtLD; } trace_func_data; static linmin_real trace_func(linmin_real theta, linmin_real *trace_deriv, void *data) { linmin_real trace; trace_func_data *d = (trace_func_data *) data; linmin_real c = cos(theta), s = sin(theta); { sqmatrix_copy(d->S1, d->YtY); sqmatrix_aApbB(c*c, d->S1, s*s, d->DtD); sqmatrix_ApaB(d->S1, 2*s*c, d->symYtD); if (!sqmatrix_invert(d->S1, 1, d->S2)) { /* if c or s is small, we sometimes run into numerical difficulties, and it is better to use the Taylor expansion */ if (c < 1e-4 * s && c != 0) { sqmatrix_copy(d->S1, d->DtD); CHECK(sqmatrix_invert(d->S1, 1, d->S2), "singular DtD!"); sqmatrix_AeBC(d->S2, d->S1, 0, d->symYtD, 1); sqmatrix_AeBC(d->S3, d->S2, 0, d->S1, 1); sqmatrix_aApbB(1/(s*s), d->S1, -2*c/(s*s*s), d->S3); } else if (s < 1e-4 * c && s != 0) { sqmatrix_copy(d->S1, d->YtY); CHECK(sqmatrix_invert(d->S1, 1, d->S2), "singular DtD!"); sqmatrix_AeBC(d->S2, d->S1, 0, d->symYtD, 1); sqmatrix_AeBC(d->S3, d->S2, 0, d->S1, 1); sqmatrix_aApbB(1/(c*c), d->S1, -2*s/(c*c*c), d->S3); } else { CHECK(0, "inexplicable singularity in linmin trace_func"); } } sqmatrix_copy(d->S2, d->YtAY); sqmatrix_aApbB(c*c, d->S2, s*s, d->DtAD); sqmatrix_ApaB(d->S2, 2*s*c, d->symYtAD); trace = SCALAR_RE(sqmatrix_traceAtB(d->S2, d->S1)) + (c*c * d->trace_YtLY + s*s * d->trace_DtLD + 2*s*c * d->trace_YtLD) * (c * d->lag + s * d->d_lag); } if (trace_deriv) { linmin_real c2 = cos(2*theta), s2 = sin(2*theta); sqmatrix_copy(d->S3, d->YtAY); sqmatrix_ApaB(d->S3, -1.0, d->DtAD); sqmatrix_aApbB(-0.5 * s2, d->S3, c2, d->symYtAD); *trace_deriv = SCALAR_RE(sqmatrix_traceAtB(d->S1, d->S3)); sqmatrix_AeBC(d->S3, d->S1, 0, d->S2, 1); sqmatrix_AeBC(d->S2, d->S3, 0, d->S1, 1); sqmatrix_copy(d->S3, d->YtY); sqmatrix_ApaB(d->S3, -1.0, d->DtD); sqmatrix_aApbB(-0.5 * s2, d->S3, c2, d->symYtD); *trace_deriv -= SCALAR_RE(sqmatrix_traceAtB(d->S2, d->S3)); *trace_deriv *= 2; *trace_deriv += (-s2 * d->trace_YtLY + s2 * d->trace_DtLD + 2*c2 * d->trace_YtLD) * (c * d->lag + s * d->d_lag); *trace_deriv += (c*c * d->trace_YtLY + s*s * d->trace_DtLD + 2*s*c * d->trace_YtLD) * (-s * d->lag + c * d->d_lag); } return trace; } /**************************************************************************/ #define EIG_HISTORY_SIZE 5 /* find eigenvectors Y of A by minimizing Rayleigh quotient tr [ Yt A Y / (Yt Y) ] + lag * tr [ Yt L Y ] where lag is a Lagrange multiplier and L is a Hermitian operator implementing some constraint tr [ Yt L Y ] = 0 on the eigenvectors (if L is not NULL). Constraints that commute with A (and L) are specified via the "constraint" argument, which gives the projection operator for the constraint(s). */ void eigensolver_lagrange(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectpreconditioner K, void *Kdata, evectconstraint constraint, void *constraint_data, evectoperator L, void *Ldata, real *lag, evectmatrix Work[], int nWork, real tolerance, int *num_iterations, int flags) { real convergence_history[EIG_HISTORY_SIZE]; evectmatrix G, D, X, prev_G; real g_lag = 0, d_lag = 0, prev_g_lag = 0; short usingConjugateGradient = 0, use_polak_ribiere = 0, use_linmin = 1; real E, prev_E = 0.0; real d_scale = 1.0; real traceGtX, prev_traceGtX = 0.0; real theta, prev_theta = 0.5; int i, iteration = 0, num_emergency_restarts = 0; mpiglue_clock_t prev_feedback_time; real time_AZ, time_KZ=0, time_ZtZ, time_ZtW, time_ZS, time_linmin=0; real linmin_improvement = 0; sqmatrix YtAYU, DtAD, symYtAD, YtY, U, DtD, symYtD, S1, S2, S3; trace_func_data tfd; prev_feedback_time = MPIGLUE_CLOCK; #ifdef DEBUG flags |= EIGS_VERBOSE; #endif CHECK(nWork >= 2, "not enough workspace"); G = Work[0]; X = Work[1]; usingConjugateGradient = nWork >= 3; if (usingConjugateGradient) { D = Work[2]; for (i = 0; i < D.n * D.p; ++i) ASSIGN_ZERO(D.data[i]); } else D = X; use_polak_ribiere = nWork >= 4; if (use_polak_ribiere) { prev_G = Work[3]; for (i = 0; i < Y.n * Y.p; ++i) ASSIGN_ZERO(prev_G.data[i]); if (flags & EIGS_ORTHOGONAL_PRECONDITIONER) /* see below */ fprintf(stderr, "WARNING: Polak-Ribiere may not work with the " "orthogonal-preconditioner option.\n"); } else prev_G = G; YtAYU = create_sqmatrix(Y.p); /* holds Yt A Y */ DtAD = create_sqmatrix(Y.p); /* holds Dt A D */ symYtAD = create_sqmatrix(Y.p); /* holds (Yt A D + Dt A Y) / 2 */ YtY = create_sqmatrix(Y.p); /* holds Yt Y */ U = create_sqmatrix(Y.p); /* holds 1 / (Yt Y) */ DtD = create_sqmatrix(Y.p); /* holds Dt D */ symYtD = create_sqmatrix(Y.p); /* holds (Yt D + Dt Y) / 2 */ /* Notation note: "t" represents a dagger superscript, so Yt represents adjoint(Y), or Y' in MATLAB syntax. */ /* scratch matrices: */ S1 = create_sqmatrix(Y.p); S2 = create_sqmatrix(Y.p); S3 = create_sqmatrix(Y.p); tfd.YtAY = S1; tfd.DtAD = DtAD; tfd.symYtAD = symYtAD; tfd.YtY = YtY; tfd.DtD = DtD; tfd.symYtD = symYtD; tfd.S1 = YtAYU; tfd.S2 = S2; tfd.S3 = S3; restartY: if (flags & EIGS_ORTHONORMALIZE_FIRST_STEP) { evectmatrix_XtX(U, Y, S2); sqmatrix_assert_hermitian(U); CHECK(sqmatrix_invert(U, 1, S2), "non-independent initial Y"); sqmatrix_sqrt(S1, U, S2); /* S1 = 1/sqrt(Yt*Y) */ evectmatrix_XeYS(G, Y, S1, 1); /* G = orthonormalize Y */ evectmatrix_copy(Y, G); } for (i = 0; i < Y.p; ++i) eigenvals[i] = 0.0; for (i = 0; i < EIG_HISTORY_SIZE; ++i) convergence_history[i] = 10000.0; if (constraint) constraint(Y, constraint_data); do { real y_norm, gamma_numerator = 0; if (flags & EIGS_FORCE_APPROX_LINMIN) use_linmin = 0; TIME_OP(time_ZtZ, evectmatrix_XtX(YtY, Y, S2)); sqmatrix_assert_hermitian(YtY); y_norm = sqrt(SCALAR_RE(sqmatrix_trace(YtY)) / Y.p); blasglue_rscal(Y.p * Y.n, 1/y_norm, Y.data, 1); blasglue_rscal(Y.p * Y.p, 1/(y_norm*y_norm), YtY.data, 1); sqmatrix_copy(U, YtY); if (!sqmatrix_invert(U, 1, S2)) { /* non-independent Y columns */ /* emergency restart with random Y */ CHECK(iteration + 10 * ++num_emergency_restarts < EIGENSOLVER_MAX_ITERATIONS, "too many emergency restarts"); mpi_one_printf(" emergency randomization of Y on iter. %d\n", iteration); for (i = 0; i < Y.p * Y.n; ++i) ASSIGN_SCALAR(Y.data[i], rand() * 1.0 / RAND_MAX - 0.5, rand() * 1.0 / RAND_MAX - 0.5); goto restartY; } /* If trace(1/YtY) gets big, it means that the columns of Y are becoming nearly parallel. This sometimes happens, especially in the targeted eigensolver, because the preconditioner pushes all the columns towards the ground state. If it gets too big, it seems to be a good idea to re-orthogonalize, resetting conjugate-gradient, as otherwise we start to encounter numerical problems. */ if (flags & EIGS_REORTHOGONALIZE) { real traceU = SCALAR_RE(sqmatrix_trace(U)); mpi_assert_equal(traceU); if (traceU > EIGS_TRACE_U_THRESHOLD * U.p) { mpi_one_printf(" re-orthonormalizing Y\n"); sqmatrix_sqrt(S1, U, S2); /* S1 = 1/sqrt(Yt*Y) */ evectmatrix_XeYS(G, Y, S1, 1); /* G = orthonormalize Y */ evectmatrix_copy(Y, G); prev_traceGtX = 0.0; evectmatrix_XtX(YtY, Y, S2); y_norm = sqrt(SCALAR_RE(sqmatrix_trace(YtY)) / Y.p); blasglue_rscal(Y.p * Y.n, 1/y_norm, Y.data, 1); blasglue_rscal(Y.p * Y.p, 1/(y_norm*y_norm), YtY.data, 1); sqmatrix_copy(U, YtY); CHECK(sqmatrix_invert(U, 1, S2), "non-independent Y after re-orthogonalization"); } } TIME_OP(time_AZ, A(Y, X, Adata, 1, G)); /* X = AY; G is scratch */ #ifdef DEBUG evectmatrix_XtY(S1, Y, X, S2); sqmatrix_assert_hermitian(S1); #endif /* G = AYU; note that U is Hermitian: */ TIME_OP(time_ZS, evectmatrix_XeYS(G, X, U, 1)); TIME_OP(time_ZtW, evectmatrix_XtY(YtAYU, Y, G, S2)); E = SCALAR_RE(sqmatrix_trace(YtAYU)); CHECK(!BADNUM(E), "crazy number detected in trace!!\n"); mpi_assert_equal(E); if (L) { /* X = LY, no scratch */ L(Y, X, Ldata, 1, X); g_lag = tfd.trace_YtLY = SCALAR_RE(evectmatrix_traceXtY(Y, X)); E += *lag * g_lag; } convergence_history[iteration % EIG_HISTORY_SIZE] = 200.0 * fabs(E - prev_E) / (fabs(E) + fabs(prev_E)); if (iteration > 0 && mpi_is_master() && ((flags & EIGS_VERBOSE) || MPIGLUE_CLOCK_DIFF(MPIGLUE_CLOCK, prev_feedback_time) > FEEDBACK_TIME)) { mpi_one_printf(" iteration %4d: " "trace = %0.16g (%g%% change)\n", iteration, (double)E, (double)convergence_history[iteration % EIG_HISTORY_SIZE]); if (flags & EIGS_VERBOSE) debug_output_malloc_count(); fflush(stdout); /* make sure output appears */ prev_feedback_time = MPIGLUE_CLOCK; /* reset feedback clock */ } if (iteration > 0 && fabs(E - prev_E) < tolerance * 0.5 * (E + prev_E + 1e-7)) break; /* convergence! hooray! */ /* Compute gradient of functional: G = (1 - Y U Yt) A Y U */ sqmatrix_AeBC(S1, U, 0, YtAYU, 0); evectmatrix_XpaYS(G, -1.0, Y, S1, 1); if (L) { /* include Lagrange gradient; note X = LY from above */ evectmatrix_aXpbY(1.0, G, *lag, X); } /* set X = precondition(G): */ if (K != NULL) { TIME_OP(time_KZ, K(G, X, Kdata, Y, NULL, YtY)); /* Note: we passed NULL for eigenvals since we haven't diagonalized YAY (nor are the Y's orthonormal). */ } else evectmatrix_copy(X, G); /* preconditioner is identity */ /* We have to apply the constraint here, in case it doesn't commute with the preconditioner. */ if (constraint) constraint(X, constraint_data); if (flags & EIGS_PROJECT_PRECONDITIONING) { /* Operate projection P = (1 - Y U Yt) on X: */ evectmatrix_XtY(symYtD, Y, X, S2); /* symYtD = Yt X */ sqmatrix_AeBC(S1, U, 0, symYtD, 0); evectmatrix_XpaYS(X, -1.0, Y, S1, 0); } /* Now, for the case of EIGS_ORTHOGONAL_PRECONDITIONER, we need to use G as scratch space in order to avoid the need for an extra column bundle. Before that, we need to do any computations that we need with G. (Yes, we're playing tricksy games here, but isn't it fun?) */ mpi_assert_equal(traceGtX = SCALAR_RE(evectmatrix_traceXtY(G, X)) + g_lag * g_lag); if (usingConjugateGradient) { if (use_polak_ribiere) { /* assign G = G - prev_G and copy prev_G = G in the same loop. We can't use the BLAS routines because we would then need an extra n x p array. */ for (i = 0; i < Y.n * Y.p; ++i) { scalar g = G.data[i]; ACCUMULATE_DIFF(G.data[i], prev_G.data[i]); prev_G.data[i] = g; } gamma_numerator = SCALAR_RE(evectmatrix_traceXtY(G, X)); { real g = g_lag; g_lag -= prev_g_lag; prev_g_lag = g; } gamma_numerator += g_lag * prev_g_lag; } else /* otherwise, use Fletcher-Reeves (ignore prev_G) */ gamma_numerator = traceGtX; mpi_assert_equal(gamma_numerator); } /* The motivation for the following code came from a trick I noticed in Sleijpen and Van der Vorst, "A Jacobi-Davidson iteration method for linear eigenvalue problems," SIAM J. Matrix Anal. Appl. 17, 401-425 (April 1996). (The motivation in our case comes from the fact that if you look at the Hessian matrix of the problem, it has a projection operator just as in the above reference, and so we should the same technique to invert it.) So far, though, the hoped-for savings haven't materialized; maybe we need a better preconditioner first. */ if (flags & EIGS_ORTHOGONAL_PRECONDITIONER) { real traceGtX_delta; /* change in traceGtX when we update X */ /* set G = precondition(Y): */ if (K != NULL) K(Y, G, Kdata, Y, NULL, YtY); else evectmatrix_copy(G, Y); /* preconditioner is identity */ /* let X = KG - KY S3t, where S3 is chosen so that YtX = 0: S3 = (YtKG)t / (YtKY). Recall that, at this point, X holds KG and G holds KY. K is assumed Hermitian. */ evectmatrix_XtY(S1, Y, G, S2); CHECK(sqmatrix_invert(S1, 0, S2), "singular YtKY"); /* S1 = 1 / (YtKY) */ evectmatrix_XtY(S2, X, Y, S3); /* S2 = GtKY = (YtKG)t */ sqmatrix_AeBC(S3, S2, 0 , S1, 1); evectmatrix_XpaYS(X, -1.0, G, S3, 1); /* Update traceGtX and gamma_numerator. The update for gamma_numerator isn't really right in the case of Polak-Ribiere; it amounts to doing a weird combination of P-R and Fletcher-Reeves...what will happen? (To do the right thing, I think we would need an extra column bundle.) */ traceGtX_delta = -SCALAR_RE(sqmatrix_traceAtB(S3, S2)); traceGtX += traceGtX_delta; if (usingConjugateGradient) gamma_numerator += traceGtX_delta; } /* In conjugate-gradient, the minimization direction D is a combination of X with the previous search directions. Otherwise, we just have D = X. */ if (usingConjugateGradient) { real gamma; if (prev_traceGtX == 0.0) gamma = 0.0; else gamma = gamma_numerator / prev_traceGtX; if ((flags & EIGS_DYNAMIC_RESET_CG) && 2.0 * convergence_history[iteration % EIG_HISTORY_SIZE] >= convergence_history[(iteration+1) % EIG_HISTORY_SIZE]) { gamma = 0.0; if (flags & EIGS_VERBOSE) mpi_one_printf(" dynamically resetting CG direction...\n"); for (i = 1; i < EIG_HISTORY_SIZE; ++i) convergence_history[(iteration+i) % EIG_HISTORY_SIZE] = 10000.0; } if ((flags & EIGS_RESET_CG) && (iteration + 1) % CG_RESET_ITERS == 0) { /* periodically forget previous search directions, and just juse D = X */ gamma = 0.0; if (flags & EIGS_VERBOSE) mpi_one_printf(" resetting CG direction...\n"); } mpi_assert_equal(gamma * d_scale); evectmatrix_aXpbY(gamma * d_scale, D, 1.0, X); d_lag = gamma * d_scale * d_lag + g_lag; } d_scale = 1.0; /* Minimize the trace along Y + lamba*D: */ if (!use_linmin) { real dE, E2, d2E, t, d_norm; /* Here, we do an approximate line minimization along D by evaluating dE (the derivative) at the current point, and the trace E2 at a second point, and then approximating the second derivative d2E by finite differences. Then, we use one step of Newton's method on the derivative. This has the advantage of requiring two fewer O(np^2) matrix multiplications compared to the exact linmin. */ d_norm = sqrt(SCALAR_RE(evectmatrix_traceXtY(D,D)) / Y.p); mpi_assert_equal(d_norm); /* dE = 2 * tr Gt D. (Use prev_G instead of G so that it works even when we are using Polak-Ribiere.) */ dE = 2.0 * SCALAR_RE(evectmatrix_traceXtY(prev_G, D)) / d_norm; /* shift Y by prev_theta along D, in the downhill direction: */ t = dE < 0 ? -fabs(prev_theta) : fabs(prev_theta); evectmatrix_aXpbY(1.0, Y, t / d_norm, D); evectmatrix_XtX(U, Y, S2); CHECK(sqmatrix_invert(U, 1, S2), "singular YtY"); /* U = 1 / (Yt Y) */ A(Y, G, Adata, 1, X); /* G = AY; X is scratch */ evectmatrix_XtY(S1, Y, G, S2); /* S1 = Yt A Y */ E2 = SCALAR_RE(sqmatrix_traceAtB(S1, U)); if (L) { *lag += (t / d_norm) * d_lag; L(Y, X, Ldata, 1, X); E2 += *lag * SCALAR_RE(evectmatrix_traceXtY(Y, X)); } mpi_assert_equal(E2); /* Get finite-difference approximation for the 2nd derivative of the trace. Equivalently, fit to a quadratic of the form: E(theta) = E + dE theta + 1/2 d2E theta^2 */ d2E = (E2 - E - dE * t) / (0.5 * t * t); theta = -dE/d2E; /* If the 2nd derivative is negative, or a big shift in the trace is predicted (compared to the previous iteration), then this approximate line minimization is probably not very good; switch back to the exact line minimization. Hopefully, we won't have to abort like this very often, as it wastes operations. */ if (d2E < 0 || -0.5*dE*theta > 20.0 * fabs(E-prev_E)) { if (flags & EIGS_FORCE_APPROX_LINMIN) { if (flags & EIGS_VERBOSE) mpi_one_printf(" using previous stepsize\n"); } else { if (flags & EIGS_VERBOSE) mpi_one_printf(" switching back to exact " "line minimization\n"); use_linmin = 1; evectmatrix_aXpbY(1.0, Y, -t / d_norm, D); if (L) *lag -= (t / d_norm) * d_lag; prev_theta = atan(prev_theta); /* convert to angle */ /* don't do this again: */ flags |= EIGS_FORCE_EXACT_LINMIN; } } else { /* Shift Y by theta, hopefully minimizing the trace: */ evectmatrix_aXpbY(1.0, Y, (theta - t) / d_norm, D); if (L) *lag += ((theta - t) / d_norm) * d_lag; } } if (use_linmin) { real dE, d2E; d_scale = sqrt(SCALAR_RE(evectmatrix_traceXtY(D, D)) / Y.p); mpi_assert_equal(d_scale); blasglue_rscal(Y.p * Y.n, 1/d_scale, D.data, 1); A(D, G, Adata, 0, X); /* G = A D; X is scratch */ evectmatrix_XtX(DtD, D, S2); evectmatrix_XtY(DtAD, D, G, S2); sqmatrix_assert_hermitian(DtD); sqmatrix_assert_hermitian(DtAD); evectmatrix_XtY(S1, Y, D, S2); sqmatrix_symmetrize(symYtD, S1); evectmatrix_XtY(S1, Y, G, S2); sqmatrix_symmetrize(symYtAD, S1); sqmatrix_AeBC(S1, U, 0, symYtD, 1); dE = 2.0 * (SCALAR_RE(sqmatrix_traceAtB(U, symYtAD)) - SCALAR_RE(sqmatrix_traceAtB(YtAYU, S1))); sqmatrix_copy(S2, DtD); sqmatrix_ApaBC(S2, -4.0, symYtD, 0, S1, 0); sqmatrix_AeBC(S3, symYtAD, 0, S1, 0); sqmatrix_AeBC(S1, U, 0, S2, 1); d2E = 2.0 * (SCALAR_RE(sqmatrix_traceAtB(U, DtAD)) - SCALAR_RE(sqmatrix_traceAtB(YtAYU, S1)) - 4.0 * SCALAR_RE(sqmatrix_traceAtB(U, S3))); if (L) { d_lag *= 1/d_scale; tfd.d_lag = d_lag; tfd.lag = *lag; /* note: tfd.trace_YtLY was set above */ L(D, X, Ldata, 0, X); tfd.trace_DtLD = SCALAR_RE(evectmatrix_traceXtY(D, X)); tfd.trace_YtLD = SCALAR_RE(evectmatrix_traceXtY(Y, X)); dE += tfd.lag * 2.0 * tfd.trace_YtLD + tfd.d_lag * tfd.trace_YtLY; d2E += tfd.lag * 2.0 * tfd.trace_DtLD + tfd.d_lag * 4.0 * tfd.trace_YtLD; } else { tfd.d_lag = tfd.lag = tfd.trace_YtLY = tfd.trace_DtLD = tfd.trace_YtLD = 0; } /* this is just Newton-Raphson to find a root of the first derivative: */ theta = -dE/d2E; if (d2E < 0) { if (flags & EIGS_VERBOSE) mpi_one_printf(" near maximum in trace\n"); theta = dE > 0 ? -fabs(prev_theta) : fabs(prev_theta); } else if (-0.5*dE*theta > 2.0 * fabs(E-prev_E)) { if (flags & EIGS_VERBOSE) mpi_one_printf(" large trace change predicted " "(%g%%)\n", (double) (-0.5*dE*theta/E * 100.0)); } if (fabs(theta) >= K_PI) { if (flags & EIGS_VERBOSE) mpi_one_printf(" large theta (%g)\n", (double)theta); theta = dE > 0 ? -fabs(prev_theta) : fabs(prev_theta); } /* Set S1 to YtAYU * YtY = YtAY for use in linmin. (tfd.YtAY == S1). */ sqmatrix_AeBC(S1, YtAYU, 0, YtY, 1); sqmatrix_assert_hermitian(S1); mpi_assert_equal(theta); { linmin_real new_E, new_dE; TIME_OP(time_linmin, theta = linmin(&new_E, &new_dE, theta, E, dE, 0.1, MIN2(tolerance, 1e-6), 1e-14, 0, dE > 0 ? -K_PI : K_PI, trace_func, &tfd, flags & EIGS_VERBOSE)); linmin_improvement = fabs(E - new_E) * 2.0/fabs(E + new_E); } mpi_assert_equal(theta); CHECK(fabs(theta) <= K_PI, "converged out of bounds!"); /* Shift Y to new location minimizing the trace along D: */ evectmatrix_aXpbY(cos(theta), Y, sin(theta), D); if (L) *lag = *lag * cos(theta) + d_lag * sin(theta); } /* In exact arithmetic, we don't need to do this, but in practice it is probably a good idea to keep errors from adding up and eventually violating the constraints. */ if (constraint) constraint(Y, constraint_data); prev_traceGtX = traceGtX; prev_theta = theta; prev_E = E; /* Finally, we use the times for the various operations to help us pick an algorithm for the next iteration: */ { real t_exact, t_approx; t_exact = EXACT_LINMIN_TIME(time_AZ, time_KZ, time_ZtW, time_ZS, time_ZtZ, time_linmin); t_approx = APPROX_LINMIN_TIME(time_AZ, time_KZ, time_ZtW, time_ZS, time_ZtZ); if (flags & EIGS_PROJECT_PRECONDITIONING) { t_exact += time_ZtW + time_ZS; t_approx += time_ZtW + time_ZS; } /* Sum the times over the processors so that all the processors compare the same, average times. */ mpi_allreduce_1(&t_exact, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); mpi_allreduce_1(&t_approx, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); if (!(flags & EIGS_FORCE_EXACT_LINMIN) && linmin_improvement > 0 && linmin_improvement <= APPROX_LINMIN_IMPROVEMENT_THRESHOLD && t_exact > t_approx * APPROX_LINMIN_SLOWDOWN_GUESS) { if ((flags & EIGS_VERBOSE) && use_linmin) mpi_one_printf(" switching to approximate " "line minimization (decrease time by %g%%)\n", (double) ((t_exact - t_approx) * 100.0 / t_exact)); use_linmin = 0; } else if (!(flags & EIGS_FORCE_APPROX_LINMIN)) { if ((flags & EIGS_VERBOSE) && !use_linmin) mpi_one_printf(" switching back to exact " "line minimization\n"); use_linmin = 1; prev_theta = atan(prev_theta); /* convert to angle */ } } } while (++iteration < EIGENSOLVER_MAX_ITERATIONS); CHECK(iteration < EIGENSOLVER_MAX_ITERATIONS, "failure to converge after " STRINGIZE(EIGENSOLVER_MAX_ITERATIONS) " iterations"); evectmatrix_XtX(U, Y, S2); CHECK(sqmatrix_invert(U, 1, S2), "singular YtY at end"); eigensolver_get_eigenvals_aux(Y, eigenvals, A, Adata, X, G, U, S1, S2); *num_iterations = iteration; destroy_sqmatrix(S3); destroy_sqmatrix(S2); destroy_sqmatrix(S1); destroy_sqmatrix(symYtD); destroy_sqmatrix(DtD); destroy_sqmatrix(U); destroy_sqmatrix(YtY); destroy_sqmatrix(symYtAD); destroy_sqmatrix(DtAD); destroy_sqmatrix(YtAYU); } void eigensolver(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectpreconditioner K, void *Kdata, evectconstraint constraint, void *constraint_data, evectmatrix Work[], int nWork, real tolerance, int *num_iterations, int flags) { eigensolver_lagrange(Y, eigenvals, A, Adata, K, Kdata, constraint, constraint_data, 0, 0, 0, Work, nWork, tolerance, num_iterations, flags); } mpb-1.5/src/matrices/Makefile.in0000644000175400001440000007146412315337034013536 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/matrices DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmatrices_la_LIBADD = am_libmatrices_la_OBJECTS = libmatrices_la-blasglue.lo \ libmatrices_la-eigensolver.lo \ libmatrices_la-eigensolver_davidson.lo \ libmatrices_la-eigensolver_utils.lo \ libmatrices_la-evectmatrix.lo libmatrices_la-linmin.lo \ libmatrices_la-matrices.lo libmatrices_la-minpack2-linmin.lo \ libmatrices_la-sqmatrix.lo libmatrices_la_OBJECTS = $(am_libmatrices_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmatrices_la_SOURCES) DIST_SOURCES = $(libmatrices_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libmatrices.la EXTRA_DIST = README libmatrices_la_SOURCES = blasglue.c blasglue.h eigensolver.c \ eigensolver.h eigensolver_davidson.c eigensolver_utils.c evectmatrix.c \ linmin.c linmin.h matrices.c matrices.h minpack2-linmin.c scalar.h \ sqmatrix.c libmatrices_la_CPPFLAGS = -I$(srcdir)/../util all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/matrices/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/matrices/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmatrices.la: $(libmatrices_la_OBJECTS) $(libmatrices_la_DEPENDENCIES) $(EXTRA_libmatrices_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmatrices_la_OBJECTS) $(libmatrices_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-blasglue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-eigensolver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-eigensolver_davidson.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-eigensolver_utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-evectmatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-linmin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-matrices.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-minpack2-linmin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmatrices_la-sqmatrix.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libmatrices_la-blasglue.lo: blasglue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-blasglue.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-blasglue.Tpo -c -o libmatrices_la-blasglue.lo `test -f 'blasglue.c' || echo '$(srcdir)/'`blasglue.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-blasglue.Tpo $(DEPDIR)/libmatrices_la-blasglue.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='blasglue.c' object='libmatrices_la-blasglue.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-blasglue.lo `test -f 'blasglue.c' || echo '$(srcdir)/'`blasglue.c libmatrices_la-eigensolver.lo: eigensolver.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-eigensolver.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-eigensolver.Tpo -c -o libmatrices_la-eigensolver.lo `test -f 'eigensolver.c' || echo '$(srcdir)/'`eigensolver.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-eigensolver.Tpo $(DEPDIR)/libmatrices_la-eigensolver.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='eigensolver.c' object='libmatrices_la-eigensolver.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-eigensolver.lo `test -f 'eigensolver.c' || echo '$(srcdir)/'`eigensolver.c libmatrices_la-eigensolver_davidson.lo: eigensolver_davidson.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-eigensolver_davidson.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-eigensolver_davidson.Tpo -c -o libmatrices_la-eigensolver_davidson.lo `test -f 'eigensolver_davidson.c' || echo '$(srcdir)/'`eigensolver_davidson.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-eigensolver_davidson.Tpo $(DEPDIR)/libmatrices_la-eigensolver_davidson.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='eigensolver_davidson.c' object='libmatrices_la-eigensolver_davidson.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-eigensolver_davidson.lo `test -f 'eigensolver_davidson.c' || echo '$(srcdir)/'`eigensolver_davidson.c libmatrices_la-eigensolver_utils.lo: eigensolver_utils.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-eigensolver_utils.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-eigensolver_utils.Tpo -c -o libmatrices_la-eigensolver_utils.lo `test -f 'eigensolver_utils.c' || echo '$(srcdir)/'`eigensolver_utils.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-eigensolver_utils.Tpo $(DEPDIR)/libmatrices_la-eigensolver_utils.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='eigensolver_utils.c' object='libmatrices_la-eigensolver_utils.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-eigensolver_utils.lo `test -f 'eigensolver_utils.c' || echo '$(srcdir)/'`eigensolver_utils.c libmatrices_la-evectmatrix.lo: evectmatrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-evectmatrix.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-evectmatrix.Tpo -c -o libmatrices_la-evectmatrix.lo `test -f 'evectmatrix.c' || echo '$(srcdir)/'`evectmatrix.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-evectmatrix.Tpo $(DEPDIR)/libmatrices_la-evectmatrix.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='evectmatrix.c' object='libmatrices_la-evectmatrix.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-evectmatrix.lo `test -f 'evectmatrix.c' || echo '$(srcdir)/'`evectmatrix.c libmatrices_la-linmin.lo: linmin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-linmin.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-linmin.Tpo -c -o libmatrices_la-linmin.lo `test -f 'linmin.c' || echo '$(srcdir)/'`linmin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-linmin.Tpo $(DEPDIR)/libmatrices_la-linmin.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linmin.c' object='libmatrices_la-linmin.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-linmin.lo `test -f 'linmin.c' || echo '$(srcdir)/'`linmin.c libmatrices_la-matrices.lo: matrices.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-matrices.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-matrices.Tpo -c -o libmatrices_la-matrices.lo `test -f 'matrices.c' || echo '$(srcdir)/'`matrices.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-matrices.Tpo $(DEPDIR)/libmatrices_la-matrices.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrices.c' object='libmatrices_la-matrices.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-matrices.lo `test -f 'matrices.c' || echo '$(srcdir)/'`matrices.c libmatrices_la-minpack2-linmin.lo: minpack2-linmin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-minpack2-linmin.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-minpack2-linmin.Tpo -c -o libmatrices_la-minpack2-linmin.lo `test -f 'minpack2-linmin.c' || echo '$(srcdir)/'`minpack2-linmin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-minpack2-linmin.Tpo $(DEPDIR)/libmatrices_la-minpack2-linmin.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='minpack2-linmin.c' object='libmatrices_la-minpack2-linmin.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-minpack2-linmin.lo `test -f 'minpack2-linmin.c' || echo '$(srcdir)/'`minpack2-linmin.c libmatrices_la-sqmatrix.lo: sqmatrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmatrices_la-sqmatrix.lo -MD -MP -MF $(DEPDIR)/libmatrices_la-sqmatrix.Tpo -c -o libmatrices_la-sqmatrix.lo `test -f 'sqmatrix.c' || echo '$(srcdir)/'`sqmatrix.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmatrices_la-sqmatrix.Tpo $(DEPDIR)/libmatrices_la-sqmatrix.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sqmatrix.c' object='libmatrices_la-sqmatrix.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmatrices_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmatrices_la-sqmatrix.lo `test -f 'sqmatrix.c' || echo '$(srcdir)/'`sqmatrix.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir 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 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 # 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: mpb-1.5/src/matrices/blasglue.h0000644000175400001440000000414312315341423013423 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef BLASGLUE_H #define BLASGLUE_H #include "scalar.h" extern void blasglue_axpy(int n, real a, scalar *x, int incx, scalar *y, int incy); extern void blasglue_scal(int n, scalar a, scalar *x, int incx); extern void blasglue_rscal(int n, real a, scalar *x, int incx); extern void blasglue_copy(int n, scalar *x, int incx, scalar *y, int incy); extern scalar blasglue_dotc(int n, scalar *x, int incx, scalar *y, int incy); void blasglue_gemm(char transa, char transb, int m, int n, int k, real a, scalar *A, int fdA, scalar *B, int fdB, real b, scalar *C, int fdC); extern void blasglue_herk(char uplo, char trans, int n, int k, real a, scalar *A, int fdA, real b, scalar *C, int fdC); extern int lapackglue_potrf(char uplo, int n, scalar *A, int fdA); extern int lapackglue_potri(char uplo, int n, scalar *A, int fdA); extern int lapackglue_hetrf(char uplo, int n, scalar *A, int fdA, int *ipiv, scalar *work, int lwork); extern int lapackglue_hetri(char uplo, int n, scalar *A, int fdA, int *ipiv, scalar *work); extern void lapackglue_heev(char jobz, char uplo, int n, scalar *A, int fdA, real *w, scalar *work, int lwork, real *rwork); extern void lapackglue_syev(char jobz, char uplo, int n, real *A, int fdA, real *w, real *work, int lwork); #endif /* BLASGLUE_H */ mpb-1.5/src/matrices/linmin.h0000644000175400001440000000250012315341423013106 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef LINMIN_H #define LINMIN_H #if defined(SCALAR_LONG_DOUBLE_PREC) typedef long double linmin_real; #else typedef double linmin_real; #endif typedef linmin_real (*linmin_func) (linmin_real x, linmin_real *deriv, void *data); extern linmin_real linmin(linmin_real *converged_f, linmin_real *converged_df, linmin_real x_guess, linmin_real f_0, linmin_real df_0, linmin_real f_tol, linmin_real df_tol, linmin_real x_tol, linmin_real x_min, linmin_real x_max, linmin_func f, void *f_data, int verbose); #endif /* LINMIN_H */ mpb-1.5/src/matrices/matrices.h0000644000175400001440000001132512315341423013434 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MATRICES_H #define MATRICES_H #include "scalar.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct { int N, localN, Nstart, allocN; int c; int n, p, alloc_p; scalar *data; } evectmatrix; typedef struct { int p, alloc_p; scalar *data; } sqmatrix; /* try to keep track of flops, at least from evectmatrix multiplications */ extern double evectmatrix_flops; /* general creation/destruction operations: */ extern evectmatrix create_evectmatrix(int N, int c, int p, int localN, int Nstart, int allocN); extern void destroy_evectmatrix(evectmatrix X); extern sqmatrix create_sqmatrix(int p); extern void destroy_sqmatrix(sqmatrix X); /* diagonal matrix utils: */ extern void matrix_XtY_diag(scalar *X, scalar *Y, int n, int p, scalar *diag); extern void matrix_XtY_diag_real(scalar *X, scalar *Y, int n, int p, real *diag); extern void matrix_XtX_diag_real(scalar *X, int n, int p, real *diag); extern void matrix_XpaY_diag(scalar *X, real a, scalar *Y, scalar *diag, int n, int p); extern void matrix_XpaY_diag_real(scalar *X, real a, scalar *Y, real *diag, int n, int p); extern void matrix_X_diag_real_pY_diag_real(scalar *X, real *diag1, scalar *Y, real *diag2, int n, int p); extern real matrix_re_trace_A_diag_real(scalar *A, real *diag, int p); extern scalar matrix_diag_trace(scalar *diag, int p); extern real matrix_diag_real_trace(real *diag, int p); /* evectmatrix operations, defined in evectmatrix.c: */ extern void evectmatrix_resize(evectmatrix *A, int p, short preserve_data); extern void evectmatrix_copy(evectmatrix X, evectmatrix Y); extern void evectmatrix_copy_slice(evectmatrix X, evectmatrix Y, int ix, int iy, int p); extern void evectmatrix_aXpbY(real a, evectmatrix X, real b, evectmatrix Y); extern void evectmatrix_aXpbYS_sub(real a, evectmatrix X, real b, evectmatrix Y, sqmatrix S, int Soffset, short sdagger); extern void evectmatrix_XeYS(evectmatrix X, evectmatrix Y, sqmatrix S, short sherm); extern void evectmatrix_XpaYS(evectmatrix X, real a, evectmatrix Y, sqmatrix S, short sdagger); extern void evectmatrix_XtX(sqmatrix U, evectmatrix X, sqmatrix S); extern void evectmatrix_XtY(sqmatrix U, evectmatrix X, evectmatrix Y, sqmatrix S); extern void evectmatrix_XtY_slice(sqmatrix U, evectmatrix X, evectmatrix Y, int ix, int iy, int p, sqmatrix S); extern void evectmatrixXtY_sub(sqmatrix U, int Uoffset, evectmatrix X, evectmatrix Y, sqmatrix S); extern void evectmatrix_XtY_diag(evectmatrix X, evectmatrix Y, scalar *diag, scalar *scratch_diag); extern void evectmatrix_XtY_diag_real(evectmatrix X, evectmatrix Y, real *diag, real *scratch_diag); extern void evectmatrix_XtX_diag_real(evectmatrix X, real *diag, real *scratch_diag); extern scalar evectmatrix_traceXtY(evectmatrix X, evectmatrix Y); /* sqmatrix operations, defined in sqmatrix.c: */ extern void sqmatrix_assert_hermitian(sqmatrix A); extern void sqmatrix_copy(sqmatrix A, sqmatrix B); extern void sqmatrix_resize(sqmatrix *A, int p, short preserve_data); extern void sqmatrix_copy_upper2full(sqmatrix F, sqmatrix U); extern void sqmatrix_symmetrize(sqmatrix Asym, sqmatrix A); extern scalar sqmatrix_trace(sqmatrix U); extern scalar sqmatrix_traceAtB(sqmatrix A, sqmatrix B); extern void sqmatrix_AeBC(sqmatrix A, sqmatrix B, short bdagger, sqmatrix C, short cdagger); extern void sqmatrix_ApaBC(sqmatrix A, real a, sqmatrix B, short bdagger, sqmatrix C, short cdagger); extern void sqmatrix_ApaB(sqmatrix A, real a, sqmatrix B); extern void sqmatrix_aApbB(real a, sqmatrix A, real b, sqmatrix B); extern int sqmatrix_invert(sqmatrix U, short positive_definite, sqmatrix Work); extern void sqmatrix_eigensolve(sqmatrix U, real *eigenvals, sqmatrix W); extern void sqmatrix_sqrt(sqmatrix Usqrt, sqmatrix U, sqmatrix W); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif /* MATRICES_H */ mpb-1.5/src/matrices/scalar.h0000644000175400001440000001553412315341423013100 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef SCALAR_H #define SCALAR_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if defined(SCALAR_SINGLE_PREC) typedef float real; #define SCALAR_MPI_TYPE MPI_FLOAT #elif defined(SCALAR_LONG_DOUBLE_PREC) typedef long double real; #define SCALAR_MPI_TYPE MPI_LONG_DOUBLE #else typedef double real; #define SCALAR_MPI_TYPE MPI_DOUBLE #endif /********************* complex types and operations **********************/ typedef struct { real re, im; } scalar_complex; #define CSCALAR_NUMVALS (2) #define CSCALAR_INIT_ZERO { 0.0, 0.0 } #define CSCALAR_RE(a) ((a).re) #define CSCALAR_IM(a) ((a).im) #define CASSIGN_SCALAR(a, real, imag) { (a).re = (real); (a).im = (imag); } #define CACCUMULATE_SCALAR(a, real, imag) { (a).re +=(real); (a).im +=(imag); } #define CACCUMULATE_DIFF_SCALAR(a, real, imag) { (a).re -=(real); (a).im -=(imag); } #define CASSIGN_ZERO(a) CASSIGN_SCALAR(a, 0.0, 0.0); #define CASSIGN_REAL(a, c) CASSIGN_SCALAR(a, c, 0.0) #define CASSIGN_CONJ(a, b) CASSIGN_SCALAR(a, CSCALAR_RE(b), -CSCALAR_IM(b)) #define CSCALAR_NORMSQR(a) ((a).re * (a).re + (a).im * (a).im) /* a = b * c */ #define CASSIGN_MULT(a, b, c) { \ real bbbb_re = (b).re, bbbb_im = (b).im; \ real cccc_re = (c).re, cccc_im = (c).im; \ CASSIGN_SCALAR(a, bbbb_re * cccc_re - bbbb_im * cccc_im, \ bbbb_re * cccc_im + bbbb_im * cccc_re); \ } /* a = b / c = b * conj(c) / |c|^2 */ #define CASSIGN_DIV(a, b, c) { \ scalar_complex aaaa_tmp; real aaaa_tmp_norm; \ CASSIGN_CONJ(aaaa_tmp, c); \ aaaa_tmp_norm = 1.0 / CSCALAR_NORMSQR(aaaa_tmp); \ CASSIGN_MULT(aaaa_tmp, b, aaaa_tmp); \ CASSIGN_SCALAR(a, aaaa_tmp.re*aaaa_tmp_norm, aaaa_tmp.im*aaaa_tmp_norm); \ } /* Re (b * c) */ #define CSCALAR_MULT_RE(b, c) ((b).re * (c).re - (b).im * (c).im) /* IM (b * c) */ #define CSCALAR_MULT_IM(b, c) ((b).re * (c).im + (b).im * (c).re) /* Re (b * conj(c)) */ #define CSCALAR_MULT_CONJ_RE(b, c) ((b).re * (c).re + (b).im * (c).im) /* Im (b * conj(c)) */ #define CSCALAR_MULT_CONJ_IM(b, c) ((b).im * (c).re - (b).re * (c).im) /* a = Re (b * c) */ #define CASSIGN_MULT_RE(a, b, c) { \ real bbbb_re = (b).re, bbbb_im = (b).im; \ real cccc_re = (c).re, cccc_im = (c).im; \ (a) = bbbb_re * cccc_re - bbbb_im * cccc_im; \ } /* a = Im (b * c) */ #define CASSIGN_MULT_IM(a, b, c) { \ real bbbb_re = (b).re, bbbb_im = (b).im; \ real cccc_re = (c).re, cccc_im = (c).im; \ (a) = bbbb_re * cccc_im + bbbb_im * cccc_re; \ } /* a += b * c */ #define CACCUMULATE_SUM_MULT(a, b, c) { \ real bbbb_re = (b).re, bbbb_im = (b).im; \ real cccc_re = (c).re, cccc_im = (c).im; \ CACCUMULATE_SCALAR(a, bbbb_re * cccc_re - bbbb_im * cccc_im, \ bbbb_re * cccc_im + bbbb_im * cccc_re); \ } /* a += conj(b) * c */ #define CACCUMULATE_SUM_CONJ_MULT(a, b, c) { \ real bbbb_re = (b).re, bbbb_im = (b).im; \ real cccc_re = (c).re, cccc_im = (c).im; \ CACCUMULATE_SCALAR(a, bbbb_re * cccc_re + bbbb_im * cccc_im, \ bbbb_re * cccc_im - bbbb_im * cccc_re); \ } /* a += |b|^2 */ #define CACCUMULATE_SUM_SQ(a, b) { \ real bbbb_re = (b).re, bbbb_im = (b).im; \ (a) += bbbb_re * bbbb_re + bbbb_im * bbbb_im; \ } #define CACCUMULATE_SUM(sum, a) CACCUMULATE_SCALAR(sum,CSCALAR_RE(a),CSCALAR_IM(a)) #define CACCUMULATE_DIFF(sum, a) CACCUMULATE_DIFF_SCALAR(sum,CSCALAR_RE(a),CSCALAR_IM(a)) /************************** scalars are complex **************************/ #ifdef SCALAR_COMPLEX typedef scalar_complex scalar; #define SCALAR_NUMVALS CSCALAR_NUMVALS #define SCALAR_INIT_ZERO CSCALAR_INIT_ZERO #define SCALAR_RE(a) CSCALAR_RE(a) #define SCALAR_IM(a) CSCALAR_IM(a) #define ASSIGN_SCALAR(a, real, imag) CASSIGN_SCALAR(a, real, imag) #define ACCUMULATE_SCALAR(a, real, imag) CACCUMULATE_SCALAR(a, real, imag) #define ACCUMULATE_DIFF_SCALAR(a, real, imag) CACCUMULATE_DIFF_SCALAR(a, real, imag) #define SCALAR_NORMSQR(a) CSCALAR_NORMSQR(a) /* a = b * c */ #define ASSIGN_MULT(a, b, c) CASSIGN_MULT(a, b, c) /* a = b / c = b * conj(c) / |c|^2 */ #define ASSIGN_DIV(a, b, c) CASSIGN_DIV(a, b, c) #define SCALAR_MULT_RE(b, c) CSCALAR_MULT_RE(b, c) /* Re (b * c) */ #define SCALAR_MULT_IM(b, c) CSCALAR_MULT_IM(b, c) /* Im (b * c) */ #define SCALAR_MULT_CONJ_RE(b, c) CSCALAR_MULT_CONJ_RE(b, c) #define SCALAR_MULT_CONJ_IM(b, c) CSCALAR_MULT_CONJ_IM(b, c) /* a = Re (b * c) */ #define ASSIGN_MULT_RE(a, b, c) CASSIGN_MULT_RE(a, b, c) /* a = Im (b * c) */ #define ASSIGN_MULT_IM(a, b, c) CASSIGN_MULT_IM(a, b, c) /* a += b * c */ #define ACCUMULATE_SUM_MULT(a, b, c) CACCUMULATE_SUM_MULT(a, b, c) /* a += conj(b) * c */ #define ACCUMULATE_SUM_CONJ_MULT(a, b, c) CACCUMULATE_SUM_CONJ_MULT(a, b, c) /* a += |b|^2 */ #define ACCUMULATE_SUM_SQ(a, b) CACCUMULATE_SUM_SQ(a, b) /*************************** scalars are real ****************************/ #else /* scalars are real */ typedef real scalar; #define SCALAR_NUMVALS 1 #define SCALAR_INIT_ZERO 0.0 #define SCALAR_RE(a) (a) #define SCALAR_IM(a) (0.0) #define ASSIGN_SCALAR(a, real, imag) (a) = (real); #define ACCUMULATE_SCALAR(a, real, imag) (a) += (real); #define ACCUMULATE_DIFF_SCALAR(a, real, imag) (a) -= (real); #define SCALAR_NORMSQR(a) ((a) * (a)) #define ASSIGN_MULT(a, b, c) (a) = (b) * (c); #define ASSIGN_DIV(a, b, c) (a) = (b) / (c); #define SCALAR_MULT_RE(b, c) ((b) * (c)) #define SCALAR_MULT_IM(b, c) (0.0) #define SCALAR_MULT_CONJ_RE(b, c) ((b) * (c)) #define SCALAR_MULT_CONJ_IM(b, c) (0.0) #define ASSIGN_MULT_RE(a, b, c) (a) = (b) * (c); #define ASSIGN_MULT_IM(a, b, c) (a) = 0.0; #define ACCUMULATE_SUM_MULT(a, b, c) (a) += (b) * (c); #define ACCUMULATE_SUM_CONJ_MULT(a, b, c) (a) += (b) * (c); #define ACCUMULATE_SUM_SQ(a, b) { real bbbb = (b); (a) += bbbb * bbbb; } #endif /* scalars are real */ #define ASSIGN_ZERO(a) ASSIGN_SCALAR(a, 0.0, 0.0); #define ASSIGN_REAL(a, c) ASSIGN_SCALAR(a, c, 0.0) #define ASSIGN_CONJ(a, b) ASSIGN_SCALAR(a, SCALAR_RE(b), -SCALAR_IM(b)) #define ACCUMULATE_SUM(sum, a) ACCUMULATE_SCALAR(sum,SCALAR_RE(a),SCALAR_IM(a)) #define ACCUMULATE_DIFF(sum, a) ACCUMULATE_DIFF_SCALAR(sum,SCALAR_RE(a),SCALAR_IM(a)) #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif /* SCALAR_H */ mpb-1.5/src/matrices/sqmatrix.c0000644000175400001440000002140212315341423013465 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include "matrices.h" #include "blasglue.h" /* Simple operations on sqmatrices. Also, some not-so-simple operations, like inversion and eigenvalue decomposition. */ #ifdef DEBUG static double max2(double a, double b) { return a > b ? a : b; } #endif void sqmatrix_assert_hermitian(sqmatrix A) { #ifdef DEBUG double err = 0, maxsq = 0; int i, j, p = A.p; for (i = 0; i < p; ++i) for (j = 0; j < p; ++j) maxsq = max2(maxsq, SCALAR_NORMSQR(A.data[i*p + j])); for (i = 0; i < p; ++i) { err = max2(err, (SCALAR_IM(A.data[i*p + i]) * SCALAR_IM(A.data[i*p + i])) / maxsq); for (j = i + 1; j < p; ++j) { scalar x; ASSIGN_CONJ(x, A.data[i*p + j]); ACCUMULATE_DIFF(x, A.data[j*p + i]); err = max2(err, SCALAR_NORMSQR(x) / maxsq); } } CHECK(err < 1e-10, "sqmatrix_assert_hermitian failed"); #else (void) A; /* unused */ #endif } /* A = B */ void sqmatrix_copy(sqmatrix A, sqmatrix B) { CHECK(A.p == B.p, "arrays not conformant"); blasglue_copy(A.p * A.p, B.data, 1, A.data, 1); } /* Resize A from its current size to a pxp matrix, assuming that A was initially allocated to hold at least this big a matrix. If preserve_data is nonzero, copies the existing data in A (or a subset of it, if the matrix is shrinking) to the corresponding entries of the resized matrix. */ void sqmatrix_resize(sqmatrix *A, int p, short preserve_data) { CHECK(p <= A->alloc_p, "tried to resize beyond allocated limit"); if (preserve_data) { int i, j; if (p < A->p) { for (i = 0; i < p; ++i) for (j = 0; j < p; ++j) A->data[i*p + j] = A->data[i*A->p + j]; } else { for (i = A->p-1; i >= 0; --i) for (j = A->p-1; j >= 0; --j) A->data[i*p + j] = A->data[i*A->p + j]; } } A->p = p; } /* U contains the upper triangle of a Hermitian matrix; we copy this to F and also fill in the lower triangle with the adjoint of the upper. */ void sqmatrix_copy_upper2full(sqmatrix F, sqmatrix U) { int i, j; CHECK(F.p == U.p, "arrays not conformant"); for (i = 0; i < U.p; ++i) { for (j = 0; j < i; ++j) { ASSIGN_CONJ(F.data[i*U.p + j], U.data[j*U.p + i]); } for (; j < U.p; ++j) F.data[i*U.p + j] = U.data[i*U.p + j]; } sqmatrix_assert_hermitian(F); } /* Asym = (A + adjoint(A)) / 2. Asym is thus Hermitian. */ void sqmatrix_symmetrize(sqmatrix Asym, sqmatrix A) { int i, j; CHECK(Asym.p == A.p, "arrays not conformant"); for (i = 0; i < A.p; ++i) for (j = 0; j < A.p; ++j) { int ij = i * A.p + j, ji = j * A.p + i; ASSIGN_SCALAR(Asym.data[ij], 0.5 * (SCALAR_RE(A.data[ij]) + SCALAR_RE(A.data[ji])), 0.5 * (SCALAR_IM(A.data[ij]) - SCALAR_IM(A.data[ji]))); } sqmatrix_assert_hermitian(Asym); } /* trace(U) */ scalar sqmatrix_trace(sqmatrix U) { int i; scalar trace = SCALAR_INIT_ZERO; for (i = 0; i < U.p; ++i) ACCUMULATE_SUM(trace, U.data[i*U.p + i]); return trace; } /* compute trace(adjoint(A) * B) */ scalar sqmatrix_traceAtB(sqmatrix A, sqmatrix B) { scalar trace; CHECK(A.p == B.p, "matrices not conformant"); trace = blasglue_dotc(A.p * A.p, A.data, 1, B.data, 1); return trace; } /* A = B * C. If bdagger != 0, then adjoint(B) is used; similarly for C. A must be distinct from B and C. Note that since the matrices are stored in row-major order, the most efficient operation should be B * adjoint(C), assuming the BLAS is sane. i.e. if C is hermitian, you should use cdagger = 1. Conversely, the worst operation is probably adjoint(B) * C. */ void sqmatrix_AeBC(sqmatrix A, sqmatrix B, short bdagger, sqmatrix C, short cdagger) { CHECK(A.p == B.p && A.p == C.p, "matrices not conformant"); blasglue_gemm(bdagger ? 'C' : 'N', cdagger ? 'C' : 'N', A.p, A.p, A.p, 1.0, B.data, B.p, C.data, C.p, 0.0, A.data, A.p); } /* A += a B * C. bdagger, cdagger are as for sqmatrix_AeBC, above. */ void sqmatrix_ApaBC(sqmatrix A, real a, sqmatrix B, short bdagger, sqmatrix C, short cdagger) { CHECK(A.p == B.p && A.p == C.p, "matrices not conformant"); blasglue_gemm(bdagger ? 'C' : 'N', cdagger ? 'C' : 'N', A.p, A.p, A.p, a, B.data, B.p, C.data, C.p, 1.0, A.data, A.p); } /* A += a B */ void sqmatrix_ApaB(sqmatrix A, real a, sqmatrix B) { CHECK(A.p == B.p, "matrices not conformant"); blasglue_axpy(A.p * A.p, a, B.data, 1, A.data, 1); } /* compute A = a*A + b*B; A and B may be equal. */ void sqmatrix_aApbB(real a, sqmatrix A, real b, sqmatrix B) { CHECK(A.p == B.p, "arrays not conformant"); if (a != 1.0) blasglue_rscal(A.p * A.p, a, A.data, 1); blasglue_axpy(A.p * A.p, b, B.data, 1, A.data, 1); } /* U <- 1/U. U must be Hermitian and, if positive_definite != 0, positive-definite (e.g. U = Yt*Y). Work is a scratch matrix. Returns 1 on success, 0 if failure (e.g. matrix singular) */ int sqmatrix_invert(sqmatrix U, short positive_definite, sqmatrix Work) { int i, j; sqmatrix_assert_hermitian(U); if (positive_definite) { /* factorize U: */ if (!lapackglue_potrf('U', U.p, U.data, U.p)) return 0; /* QUESTION: would it be more efficient to stop here, returning the Cholesky factorization of U? This could then be used to multiply by 1/U without ever calculating the inverse explicitly. It would probably be more numerically stable, but how do the computational costs compare? */ /* Compute 1/U (upper half only) */ if (!lapackglue_potri('U', U.p, U.data, U.p)) return 0; } else { int *ipiv; CHK_MALLOC(ipiv, int, U.p); CHECK(Work.p * Work.p >= U.p, "scratch matrix is too small"); /* factorize U: */ if (!lapackglue_hetrf('U', U.p, U.data, U.p, ipiv, Work.data, Work.p * Work.p)) return 0; /* Compute 1/U (upper half only) */ if (!lapackglue_hetri('U', U.p, U.data, U.p, ipiv, Work.data)) return 0; free(ipiv); } /* Now, copy the conjugate of the upper half onto the lower half of U */ for (i = 0; i < U.p; ++i) for (j = i + 1; j < U.p; ++j) { ASSIGN_CONJ(U.data[j * U.p + i], U.data[i * U.p + j]); } return 1; } /* U <- eigenvectors of U. U must be Hermitian. eigenvals <- eigenvalues. W is a work array. The columns of adjoint(U') are the eigenvectors, so that U == adjoint(U') D U', with D = diag(eigenvals). The eigenvalues are returned in ascending order. */ void sqmatrix_eigensolve(sqmatrix U, real *eigenvals, sqmatrix W) { real *work; sqmatrix_assert_hermitian(U); CHK_MALLOC(work, real, 3*U.p - 2); if (W.p * W.p >= 3 * U.p - 1) lapackglue_heev('V', 'U', U.p, U.data, U.p, eigenvals, W.data, W.p * W.p, work); else { scalar *morework; CHK_MALLOC(morework, scalar, 3 * U.p - 1); lapackglue_heev('V', 'U', U.p, U.data, U.p, eigenvals, morework, 3 * U.p - 1, work); free(morework); } free(work); } /* Compute Usqrt <- sqrt(U), where U must be Hermitian positive-definite. W is a work array, and must be the same size as U. Both U and W are overwritten. */ void sqmatrix_sqrt(sqmatrix Usqrt, sqmatrix U, sqmatrix W) { real *eigenvals; sqmatrix_assert_hermitian(U); CHECK(Usqrt.p == U.p && U.p == W.p, "matrices not conformant"); CHK_MALLOC(eigenvals, real, U.p); sqmatrix_eigensolve(U, eigenvals, W); { int i; /* Compute W = diag(sqrt(eigenvals)) * U; i.e. the rows of W become the rows of U times sqrt(corresponding eigenvalue) */ for (i = 0; i < U.p; ++i) { CHECK(eigenvals[i] > 0, "non-positive eigenvalue"); blasglue_copy(U.p, U.data + i*U.p, 1, W.data + i*U.p, 1); blasglue_rscal(U.p, sqrt(eigenvals[i]), W.data + i*U.p, 1); } } free(eigenvals); /* compute Usqrt = Ut * W */ sqmatrix_AeBC(Usqrt, U, 1, W, 0); } mpb-1.5/src/matrices/eigensolver.h0000644000175400001440000000702312315341423014147 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef EIGENSOLVER_H #define EIGENSOLVER_H #ifdef MPB_REAL # define real mpb_real #endif #include "matrices.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef void (*evectoperator) (evectmatrix Xin, evectmatrix Xout, void *data, int is_current_eigenvector, evectmatrix Work); typedef void (*evectpreconditioner) (evectmatrix Xin, evectmatrix Xout, void *data, evectmatrix Y, real *eigenvals, sqmatrix YtY); typedef void (*evectconstraint) (evectmatrix X, void *data); extern void eigensolver(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectpreconditioner K, void *Kdata, evectconstraint constraint, void *constraint_data, evectmatrix Work[], int nWork, real tolerance, int *num_iterations, int flags); extern void eigensolver_lagrange(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectpreconditioner K, void *Kdata, evectconstraint constraint, void *constraint_data, evectoperator L, void *Ldata, real *lag, evectmatrix Work[], int nWork, real tolerance, int *num_iterations, int flags); extern void eigensolver_davidson(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectpreconditioner K, void *Kdata, evectconstraint constraint, void *constraint_data, evectmatrix Work[], int nWork, real tolerance, int *num_iterations, int flags, real target); extern void eigensolver_get_eigenvals(evectmatrix Y, real *eigenvals, evectoperator A, void *Adata, evectmatrix Work1, evectmatrix Work2); /* eigensolver option flags, designed to be combined with a bitwise or ('|'); each flag should set exactly one bit. */ #define EIGS_VERBOSE (1<<0) #define EIGS_PROJECT_PRECONDITIONING (1<<1) #define EIGS_RESET_CG (1<<2) #define EIGS_FORCE_EXACT_LINMIN (1<<3) #define EIGS_FORCE_APPROX_LINMIN (1<<4) #define EIGS_ORTHONORMALIZE_FIRST_STEP (1<<5) #define EIGS_REORTHOGONALIZE (1<<6) #define EIGS_DYNAMIC_RESET_CG (1<<7) #define EIGS_ORTHOGONAL_PRECONDITIONER (1<<8) /* default flags: what we think works best most of the time: */ #define EIGS_DEFAULT_FLAGS (EIGS_RESET_CG | EIGS_REORTHOGONALIZE) typedef struct evectconstraint_chain_struct { evectconstraint C; void *constraint_data; struct evectconstraint_chain_struct *next; } evectconstraint_chain; extern evectconstraint_chain *evect_add_constraint(evectconstraint_chain *constraints, evectconstraint C, void *constraint_data); extern void evect_destroy_constraints(evectconstraint_chain *constraints); extern void evectconstraint_chain_func(evectmatrix X, void *data); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #ifdef MPB_REAL # undef real #endif #endif /* EIGENSOLVER_H */ mpb-1.5/src/util/0000755000175400001440000000000012315341510010675 500000000000000mpb-1.5/src/util/Makefile.am0000644000175400001440000000064412315326050012657 00000000000000noinst_LTLIBRARIES = libutil.la libutil_la_SOURCES = check.h debug_malloc.c mpi_utils.c mpi_utils.h mpiglue.h sphere-quad.h BUILT_SOURCES = sphere-quad.h noinst_PROGRAMS = sphere_quad sphere_quad_SOURCES = sphere-quad.c PRELUDE = "/* This file was automatically generated --- DO NOT EDIT */" SPHERE_QUAD = $(top_builddir)/src/util/sphere_quad sphere-quad.h: sphere_quad (echo $(PRELUDE); echo; $(SPHERE_QUAD)) > $@ mpb-1.5/src/util/sphere-quad.h0000644000175400001440000001420412315341124013206 00000000000000/* This file was automatically generated --- DO NOT EDIT */ /* For 1d, 2d, and 3d, quadrature points and weights on a unit sphere. There are num_sphere_quad[dim-1] points i, with the i-th point at (x,y,z) = (sphere_quad[dim-1][i][ 0, 1, 2 ]), and with a quadrature weight sphere_quad[dim-1][i][3]. */ #define NQUAD 50 static const int num_sphere_quad[3] = { 2, 12, 50 }; static const double sphere_quad[3][NQUAD][4] = { { {1,0,0,0.5}, {-1,0,0,0.5} }, { { 1, 0, 0, 0.083333333333333328707 }, { -1, 0, 0, 0.083333333333333328707 }, { 0, 1, 0, 0.083333333333333328707 }, { 0, -1, 0, 0.083333333333333328707 }, { -0.49999999999999977796, 0.86602540378443870761, 0, 0.083333333333333328707 }, { 0.50000000000000011102, -0.86602540378443859659, 0, 0.083333333333333328707 }, { -0.86602540378443870761, 0.49999999999999994449, 0, 0.083333333333333328707 }, { 0.86602540378443837454, -0.50000000000000044409, 0, 0.083333333333333328707 }, { -0.50000000000000044409, -0.86602540378443837454, 0, 0.083333333333333328707 }, { 0.50000000000000011102, 0.86602540378443859659, 0, 0.083333333333333328707 }, { 0.86602540378443870761, 0.49999999999999994449, 0, 0.083333333333333328707 }, { -0.86602540378443881863, -0.49999999999999972244, 0, 0.083333333333333328707 }, }, { { 0, -1, 0, 0.012698412698412698402 }, { 0, 1, 0, 0.012698412698412698402 }, { -1, 0, 0, 0.012698412698412698402 }, { 1, 0, 0, 0.012698412698412698402 }, { 0, 0, 1, 0.012698412698412698402 }, { 0, 0, -1, 0.012698412698412698402 }, { -0.57735026918962573106, -0.57735026918962573106, -0.57735026918962573106, 0.021093750000000001388 }, { 0.57735026918962573106, 0.57735026918962573106, 0.57735026918962573106, 0.021093750000000001388 }, { -0.57735026918962573106, -0.57735026918962573106, 0.57735026918962573106, 0.021093750000000001388 }, { 0.57735026918962573106, 0.57735026918962573106, -0.57735026918962573106, 0.021093750000000001388 }, { -0.57735026918962573106, 0.57735026918962573106, -0.57735026918962573106, 0.021093750000000001388 }, { 0.57735026918962573106, -0.57735026918962573106, 0.57735026918962573106, 0.021093750000000001388 }, { -0.57735026918962573106, 0.57735026918962573106, 0.57735026918962573106, 0.021093750000000001388 }, { 0.57735026918962573106, -0.57735026918962573106, -0.57735026918962573106, 0.021093750000000001388 }, { 0.70710678118654757274, -0.70710678118654757274, 0, 0.022574955908289243145 }, { -0.70710678118654757274, 0.70710678118654757274, 0, 0.022574955908289243145 }, { 0.70710678118654757274, 0, 0.70710678118654757274, 0.022574955908289243145 }, { -0.70710678118654757274, 0, -0.70710678118654757274, 0.022574955908289243145 }, { 0, -0.70710678118654757274, -0.70710678118654757274, 0.022574955908289243145 }, { 0, 0.70710678118654757274, 0.70710678118654757274, 0.022574955908289243145 }, { 0.70710678118654757274, 0, -0.70710678118654757274, 0.022574955908289243145 }, { -0.70710678118654757274, 0, 0.70710678118654757274, 0.022574955908289243145 }, { 0, 0.70710678118654757274, -0.70710678118654757274, 0.022574955908289243145 }, { 0, -0.70710678118654757274, 0.70710678118654757274, 0.022574955908289243145 }, { -0.70710678118654757274, -0.70710678118654757274, 0, 0.022574955908289243145 }, { 0.70710678118654757274, 0.70710678118654757274, 0, 0.022574955908289243145 }, { -0.90453403373329088755, -0.30151134457776362918, -0.30151134457776362918, 0.020173335537918869742 }, { 0.90453403373329088755, 0.30151134457776362918, 0.30151134457776362918, 0.020173335537918869742 }, { -0.30151134457776362918, 0.90453403373329088755, -0.30151134457776362918, 0.020173335537918869742 }, { 0.30151134457776362918, -0.90453403373329088755, 0.30151134457776362918, 0.020173335537918869742 }, { -0.30151134457776362918, -0.30151134457776362918, 0.90453403373329088755, 0.020173335537918869742 }, { 0.30151134457776362918, 0.30151134457776362918, -0.90453403373329088755, 0.020173335537918869742 }, { 0.30151134457776362918, -0.90453403373329088755, -0.30151134457776362918, 0.020173335537918869742 }, { -0.30151134457776362918, 0.90453403373329088755, 0.30151134457776362918, 0.020173335537918869742 }, { -0.30151134457776362918, 0.30151134457776362918, -0.90453403373329088755, 0.020173335537918869742 }, { 0.30151134457776362918, -0.30151134457776362918, 0.90453403373329088755, 0.020173335537918869742 }, { 0.90453403373329088755, 0.30151134457776362918, -0.30151134457776362918, 0.020173335537918869742 }, { -0.90453403373329088755, -0.30151134457776362918, 0.30151134457776362918, 0.020173335537918869742 }, { 0.30151134457776362918, -0.30151134457776362918, -0.90453403373329088755, 0.020173335537918869742 }, { -0.30151134457776362918, 0.30151134457776362918, 0.90453403373329088755, 0.020173335537918869742 }, { -0.30151134457776362918, -0.30151134457776362918, -0.90453403373329088755, 0.020173335537918869742 }, { 0.30151134457776362918, 0.30151134457776362918, 0.90453403373329088755, 0.020173335537918869742 }, { -0.30151134457776362918, -0.90453403373329088755, 0.30151134457776362918, 0.020173335537918869742 }, { 0.30151134457776362918, 0.90453403373329088755, -0.30151134457776362918, 0.020173335537918869742 }, { -0.90453403373329088755, 0.30151134457776362918, 0.30151134457776362918, 0.020173335537918869742 }, { 0.90453403373329088755, -0.30151134457776362918, -0.30151134457776362918, 0.020173335537918869742 }, { -0.90453403373329088755, 0.30151134457776362918, -0.30151134457776362918, 0.020173335537918869742 }, { 0.90453403373329088755, -0.30151134457776362918, 0.30151134457776362918, 0.020173335537918869742 }, { 0.30151134457776362918, 0.90453403373329088755, 0.30151134457776362918, 0.020173335537918869742 }, { -0.30151134457776362918, -0.90453403373329088755, -0.30151134457776362918, 0.020173335537918869742 }, } }; mpb-1.5/src/util/check.h0000644000175400001440000000411312315341423012045 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef CHECK_H #define CHECK_H #ifdef CHECK_DISABLE #define CHECK(condition, message) /* do nothing */ #else /* not CHECK_DISABLE */ #include #ifdef DEBUG extern void check_breakpoint(void); #define CHECK_BREAKPOINT check_breakpoint() /* defined in debug_malloc.c */ #else #define CHECK_BREAKPOINT /* nothing */ #endif #define CHECK(condition, message) do { \ if (!(condition)) { \ CHECK_BREAKPOINT; \ mpi_die("CHECK failure on line %d of " __FILE__ ": " \ message "\n", __LINE__); \ } \ } while (0) #endif /* not CHECK_DISABLE */ #ifdef DEBUG_MALLOC extern void *debug_malloc(size_t n); extern void debug_free(void *p); # define malloc debug_malloc # define free debug_free #endif /* Macro to check whether a floating-point number contains a ridiculous value. Note that x != x if and only if x is a NaN. */ #define BADNUM(x) ((x) != (x) || (x) > 1e50 || (x) < -1e50) extern void debug_output_malloc_count(void); extern void debug_check_memory_leaks(void); #define CHK_MALLOC(p, t, n) { \ size_t CHK_MALLOC_n_tmp = (n); \ (p) = (t *) malloc(sizeof(t) * CHK_MALLOC_n_tmp); \ CHECK((p) || CHK_MALLOC_n_tmp == 0, "out of memory!"); \ } #endif /* CHECK_H */ mpb-1.5/src/util/mpi_utils.h0000644000175400001440000000312612315341423013000 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MPI_UTILS_H #define MPI_UTILS_H #include extern void mpi_die(const char *template, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif ; extern void mpi_one_fprintf(FILE *f, const char *template, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 2, 3))) #endif ; extern void mpi_one_printf(const char *template, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif ; extern int mpi_is_master(void); extern void mpi_assert_equal(double x); extern void mpi_begin_critical_section(int tag); extern void mpi_end_critical_section(int tag); /* "in-place" Allreduce wrapper for reducing a single value */ #define mpi_allreduce_1(b, ctype, t, op, comm) { \ ctype bbbb = *(b); \ mpi_allreduce(&bbbb, (b), 1, ctype, t, op, comm); \ } #endif /* MPI_UTILS_H */ mpb-1.5/src/util/Makefile.in0000644000175400001440000004571112315337034012700 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = sphere_quad$(EXEEXT) subdir = src/util DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libutil_la_LIBADD = am_libutil_la_OBJECTS = debug_malloc.lo mpi_utils.lo libutil_la_OBJECTS = $(am_libutil_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = PROGRAMS = $(noinst_PROGRAMS) am_sphere_quad_OBJECTS = sphere-quad.$(OBJEXT) sphere_quad_OBJECTS = $(am_sphere_quad_OBJECTS) sphere_quad_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libutil_la_SOURCES) $(sphere_quad_SOURCES) DIST_SOURCES = $(libutil_la_SOURCES) $(sphere_quad_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libutil.la libutil_la_SOURCES = check.h debug_malloc.c mpi_utils.c mpi_utils.h mpiglue.h sphere-quad.h BUILT_SOURCES = sphere-quad.h sphere_quad_SOURCES = sphere-quad.c PRELUDE = "/* This file was automatically generated --- DO NOT EDIT */" SPHERE_QUAD = $(top_builddir)/src/util/sphere_quad all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list sphere_quad$(EXEEXT): $(sphere_quad_OBJECTS) $(sphere_quad_DEPENDENCIES) $(EXTRA_sphere_quad_DEPENDENCIES) @rm -f sphere_quad$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sphere_quad_OBJECTS) $(sphere_quad_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug_malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi_utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphere-quad.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir 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 \ 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 sphere-quad.h: sphere_quad (echo $(PRELUDE); echo; $(SPHERE_QUAD)) > $@ # 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: mpb-1.5/src/util/mpi_utils.c0000644000175400001440000000665412315341423013004 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include "mpi_utils.h" /* die when fatal errors occur */ void mpi_die(const char *template, ...) { va_list ap; va_start(ap, template); vfprintf(stderr, template, ap); va_end(ap); MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE); } /* Like printf, except only does anything on master process. */ void mpi_one_printf(const char *template, ...) { if (mpi_is_master()) { va_list ap; va_start(ap, template); vprintf(template, ap); va_end(ap); } } /* Like fprintf, except only does anything on master process. */ void mpi_one_fprintf(FILE *f, const char *template, ...) { if (mpi_is_master()) { va_list ap; va_start(ap, template); vfprintf(f, template, ap); va_end(ap); } } /* Return whether we are the master process (rank == 0). */ int mpi_is_master(void) { int process_rank; MPI_Comm_rank(MPI_COMM_WORLD, &process_rank); return (process_rank == 0); } /* When debugging, checks to see that x is the same over all processes, and abort the program if it is not. */ void mpi_assert_equal(double x) { #ifdef DEBUG double xmin, xmax; mpi_allreduce(&x, &xmin, 1, double, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD); mpi_allreduce(&x, &xmax, 1, double, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD); CHECK(xmin == x && xmax == x, "mpi_assert_equal failure"); #else (void) x; /* unused */ #endif } /* The following functions bracket a "critical section," a region of code that should be executed by only one process at a time. They work by having each process wait for a message from the previous process before starting. Each critical section is passed an integer "tag"...ideally, this should be a unique identifier for each critical section so that messages from different critical sections don't get mixed up somehow. */ void mpi_begin_critical_section(int tag) { int process_rank; MPI_Comm_rank(MPI_COMM_WORLD, &process_rank); if (process_rank > 0) { /* wait for a message before continuing */ MPI_Status status; int recv_tag = tag - 1; /* initialize to wrong value */ MPI_Recv(&recv_tag, 1, MPI_INT, process_rank - 1, tag, MPI_COMM_WORLD, &status); CHECK(recv_tag == tag, "invalid tag received"); } } void mpi_end_critical_section(int tag) { int process_rank, num_procs; MPI_Comm_rank(MPI_COMM_WORLD, &process_rank); MPI_Comm_size(MPI_COMM_WORLD, &num_procs); if (process_rank != num_procs - 1) { /* send a message to next process */ MPI_Send(&tag, 1, MPI_INT, process_rank + 1, tag, MPI_COMM_WORLD); } } mpb-1.5/src/util/mpiglue.h0000644000175400001440000000531112315341423012433 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MPIGLUE_H #define MPIGLUE_H /* This header file stands between our code and MPI. If MPI is present, we just #include . Otherwise, we use no-op stubs for MPI routines. */ #ifdef HAVE_MPI #include typedef double mpiglue_clock_t; #define MPIGLUE_CLOCK MPI_Wtime() #define MPIGLUE_CLOCK_DIFF(t2, t1) ((t2) - (t1)) #define mpi_allreduce(sb, rb, n, ctype, t, op, comm) \ MPI_Allreduce(sb,rb,n,t,op,comm) #else /* don't have MPI */ #include #include #include #define MPI_Init(argc,argv) 0 #define MPI_Finalize() 0 /* Stub for the MPI_Allreduce function, differing only by the addition of a "ctype" parameter that is the C type for the buffers. This routine just loops over the buffers and assigns sb to rb, since all of the MPI reduce operations become simple assignments on a single processor. (Our original implementation required rb == sb, but it seems that MPI implementations do not allow this. The MPI 2.0 specification supports an MPI_IN_PLACE constant that you can pass for sb in order to be in-place, but I don't want to require that. */ #define mpi_allreduce(sb, rb, n, ctype, t, op, comm) { \ CHECK((sb) != (rb), "MPI_Allreduce doesn't work for sendbuf == recvbuf");\ memcpy((rb), (sb), (n) * sizeof(ctype)); \ } #define MPI_Bcast(b, n, t, root, comm) 0 #define MPI_Abort(comm, errcode) exit(errcode) #define MPI_Barrier(comm) 0 #define MPI_Comm_rank(comm, rankp) *(rankp) = 0 #define MPI_Comm_size(comm, sizep) *(sizep) = 1 #define MPI_Send(sb,n,t, r,tag, comm) \ CHECK(0, "MPI_Send stub is non-functional"); #define MPI_Recv(sb,n,t, r,tag, comm,statp) \ CHECK(0, "MPI_Recv stub is non-functional"); typedef int mpiglue_status_t; #define MPI_Status mpiglue_status_t typedef clock_t mpiglue_clock_t; #define MPIGLUE_CLOCK clock() #define MPIGLUE_CLOCK_DIFF(t2, t1) (((t2) - (t1)) * 1.0 / CLOCKS_PER_SEC) #endif /* HAVE_MPI */ #endif /* MPIGLUE_H */ mpb-1.5/src/util/debug_malloc.c0000644000175400001440000001066012315341423013404 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* Debugging versions of malloc & free, to help catch common errors. The routines in this file were adapted from similar routines in the FFTW library (www.fftw.org), written by Matteo Frigo and Steven G. Johnson. FFTW is also GPLed and is also copyrighted by MIT. */ #include #include #include "config.h" #ifdef HAVE_MALLOC_H #include #endif #include "mpi_utils.h" #include "check.h" void* (*my_malloc_hook) (size_t) = 0; /********************************************************** * DEBUGGING CODE **********************************************************/ #ifdef DEBUG void check_breakpoint(void) { /* this function is only here so that we can drop into a breakpoint in a debugger when a CHECK macro fails... */ } #endif #ifdef DEBUG_MALLOC # undef malloc # undef free /* * debugging malloc/free. Initialize every malloced and freed area to * random values, just to make sure we are not using uninitialized * pointers. Also check for writes past the ends of allocated blocks, * and a couple of other things. * */ static int debug_malloc_cnt = 0; static int debug_malloc_total = 0; #define MAGIC 0xABadCafe #define MMAGIC (((int) MAGIC) < 0 ? ((int) MAGIC) : -((int) MAGIC)) #define PAD_FACTOR 2 #define TWOINTS (2 * sizeof(int)) #define VERBOSE_ALLOCATION 0 #if VERBOSE_ALLOCATION #define WHEN_VERBOSE(a) a #else #define WHEN_VERBOSE(a) #endif void *debug_malloc(size_t n) { char *p; int i; WHEN_VERBOSE(mpi_one_fprintf(stdout,"DEBUG_MALLOC %d\n", n)); if (n == 0) mpi_one_fprintf(stderr, "(Allocating a block of zero size.)\n"); debug_malloc_total += n; p = (char *) malloc(PAD_FACTOR * n + TWOINTS); CHECK(p, "debug_malloc: out of memory\n"); /* store the size in a known position */ ((int *) p)[0] = n; ((int *) p)[1] = MAGIC; for (i = 0; i < PAD_FACTOR * n; ++i) p[i + TWOINTS] = (char) (i ^ 0xDEADBEEF); ++debug_malloc_cnt; /* skip the size we stored previously */ return (void *) (p + TWOINTS); } void debug_free(void *p) { char *q = ((char *) p) - TWOINTS; CHECK(p, "debug_free: tried to free NULL pointer!\n"); CHECK(q, "debug_free: tried to free NULL+TWOINTS pointer!\n"); { int n = ((int *) q)[0]; int magic = ((int *) q)[1]; int i; WHEN_VERBOSE(mpi_one_fprintf(stdout,"DEBUG_FREE %d\n", n)); CHECK(n != MMAGIC, "Tried to free a freed pointer!\n"); *((int *) q) = MMAGIC; /* to detect duplicate free's */ CHECK(magic == MAGIC, "Wrong magic in debug_free()!\n"); ((int *) q)[1] = ~MAGIC; CHECK(n >= 0, "Tried to free block with corrupt size descriptor!\n"); debug_malloc_total -= n; CHECK(debug_malloc_total >= 0, "debug_malloc_total went negative!\n"); /* check for writing past end of array: */ for (i = n; i < PAD_FACTOR * n; ++i) if (q[i + TWOINTS] != (char) (i ^ 0xDEADBEEF)) mpi_die("Byte %d past end of array has changed!\n" "Array bounds overwritten!\n", i - n + 1); for (i = 0; i < PAD_FACTOR * n; ++i) q[i + TWOINTS] = (char) (i ^ 0xBEEFDEAD); --debug_malloc_cnt; free(q); } } #endif /* DEBUG */ /* output current memory usage: */ void debug_output_malloc_count(void) { #ifdef DEBUG_MALLOC mpi_one_fprintf(stderr, "malloc: %d blocks, %g kB\n", debug_malloc_cnt, debug_malloc_total / 1024.0); #endif } /* check for memory leaks when debugging */ void debug_check_memory_leaks(void) { #ifdef DEBUG_MALLOC if (debug_malloc_cnt || debug_malloc_total) mpi_die("MEMORY LEAK!!!\n" "number of unbalanced malloc calls = %d\n" "total leaked bytes = %d\n", debug_malloc_cnt, debug_malloc_total); #endif } mpb-1.5/src/util/sphere-quad.c0000644000175400001440000002070012315326052013202 00000000000000/* Copyright (C) 2003 Massachusetts Institute of Technology. * * 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 */ /* This file is compiled into a program sphere_quad that is used to generate the file sphere-quad.h, which is a table of quadrature points and weights for integrating on spheres in 1d/2d/3d. */ #include #include #include #define SHIFT3(x,y,z) {double SHIFT3_dummy = z; z = y; y = x; x = SHIFT3_dummy;} #define CHECK(condition, message) do { \ if (!(condition)) { \ fprintf(stderr, "CHECK failure on line %d of " __FILE__ ": " \ message "\n", __LINE__); exit(EXIT_FAILURE); \ } \ } while (0) /* Compute quadrature points and weights for integrating on the unit sphere. x, y, z, and weight should be arrays of num_sq_pts values to hold the coordinates and weights of the quadrature points on output. Currently, num_sq_pts = 12, 50, and 72 are supported. */ void spherical_quadrature_points(double *x, double *y, double *z, double *weight, int num_sq_pts) { int i,j,k,l, n = 0; double x0, y0, z0, w; if (num_sq_pts == 50) { /* Computes quadrature points and weights for 50-point 11th degree integration formula on a unit sphere. This particular quadrature formula has the advantage, for our purposes, of preserving the symmetry group of an octahedron (i.e. simple cubic symmetry, with respect to the Cartesian xyz axes). References: A. D. McLaren, "Optimal Numerical Integration on a Sphere," Math. Comp. 17, pp. 361-383 (1963). Also in: Arthur H. Stroud, "Approximate Calculation of Multiple Integrals" (Prentice Hall, 1971) (formula number U3:11-1). This code was written with the help of example code by John Burkardt: http://www.psc.edu/~burkardt/src_pt/stroud/stroud.html */ x0 = 1; y0 = z0 = 0; w = 9216 / 725760.0; for (i = 0; i < 2; ++i) { x0 = -x0; for (j = 0; j < 3; ++j) { SHIFT3(x0,y0,z0); x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } } x0 = y0 = sqrt(0.5); z0 = 0; w = 16384 / 725760.0; for (i = 0; i < 2; ++i) { x0 = -x0; for (j = 0; j < 2; ++j) { y0 = -y0; for (k = 0; k < 3; ++k) { SHIFT3(x0,y0,z0); x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } } } x0 = y0 = z0 = sqrt(1.0 / 3.0); w = 15309 / 725760.0; for (i = 0; i < 2; ++i) { x0 = -x0; for (j = 0; j < 2; ++j) { y0 = -y0; for (k = 0; k < 2; ++k) { z0 = -z0; x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } } } x0 = y0 = sqrt(1.0 / 11.0); z0 = 3 * x0; w = 14641 / 725760.0; for (i = 0; i < 2; ++i) { x0 = -x0; for (j = 0; j < 2; ++j) { y0 = -y0; for (k = 0; k < 2; ++k) { z0 = -z0; for (l = 0; l < 3; ++l) { SHIFT3(x0,y0,z0); x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } } } } } else if (num_sq_pts == 72 || num_sq_pts == 12) { /* As above (same references), but with a 72-point 14th degree formula, this time with the symmetry group of an icosohedron. (Stroud formula number U3:14-1.) Alternatively, just use the 12-point 5th degree formula consisting of the vertices of a regular icosohedron. */ /* first, the vertices of an icosohedron: */ x0 = sqrt(0.5 - sqrt(0.05)); y0 = sqrt(0.5 + sqrt(0.05)); z0 = 0; if (num_sq_pts == 72) w = 125 / 10080.0; else w = 1 / 12.0; for (i = 0; i < 2; ++i) { x0 = -x0; for (j = 0; j < 2; ++j) { y0 = -y0; for (k = 0; k < 3; ++k) { SHIFT3(x0,y0,z0); x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } } } if (num_sq_pts == 72) { /* it would be nice, for completeness, to have more digits here: */ double coords[3][5] = { { -0.151108275, 0.315838353, 0.346307112, -0.101808787, -0.409228403 }, { 0.155240600, 0.257049387, 0.666277790, 0.817386065, 0.501547712 }, { 0.976251323, 0.913330032, 0.660412970, 0.567022920, 0.762221757 } }; w = 143 / 10080.0; for (l = 0; l < 5; ++l) { x0 = coords[0][l]; y0 = coords[1][l]; z0 = coords[2][l]; for (i = 0; i < 3; ++i) { double dummy = x0; x0 = z0; z0 = -y0; y0 = -dummy; for (j = 0; j < 3; ++j) { SHIFT3(x0,y0,z0); x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } y0 = -y0; z0 = -z0; x[n] = x0; y[n] = y0; z[n] = z0; weight[n++] = w; } } } } else CHECK(0, "spherical_quadrature_points: passed unknown # points!"); CHECK(n == num_sq_pts, "bug in spherical_quadrature_points: wrong number of points!"); } #define NQUAD3 50 /* use 50-point quadrature formula by default */ /**********************************************************************/ #define K_PI 3.141592653589793238462643383279502884197 #define NQUAD2 12 /**********************************************************************/ double sqr(double x) { return x * x; } double dist2(double x1, double y1, double z1, double x2, double y2, double z2) { return sqr(x1-x2) + sqr(y1-y2) + sqr(z1-z2); } double min2(double a, double b) { return a < b ? a : b; } /* sort the array to maximize the spacing of each point with the previous points */ void sort_by_distance(int n, double x[], double y[], double z[], double w[]) { int i, j, k; for (i = 1; i < n; ++i) { double xi, yi, zi, wi; double d2max = 0; double d2maxsum = 0; int jmax = i; for (j = i; j < n; ++j) { double d2min = 1e20, d2sum = 0; for (k = 0; k < i; ++k) { double d2 = (float) (dist2(x[k],y[k],z[k], x[j],y[j],z[j])); d2min = min2(d2min, d2); d2sum += d2; } if (d2min > d2max || (d2min == d2max && d2sum > d2maxsum)) { d2max = d2min; d2maxsum = d2sum; jmax = j; } } xi = x[i], yi = y[i], zi = z[i], wi = w[i]; x[i] = x[jmax]; y[i] = y[jmax]; z[i] = z[jmax]; w[i] = w[jmax]; x[jmax] = xi; y[jmax] = yi; z[jmax] = zi; w[jmax] = wi; } } #define MAX(a,b) ((a) > (b) ? (a) : (b)) int main(void) { int i; double x2[NQUAD2], y2[NQUAD2], z2[NQUAD2], w2[NQUAD2]; double x3[NQUAD3], y3[NQUAD3], z3[NQUAD3], w3[NQUAD3]; printf( "/* For 1d, 2d, and 3d, quadrature points and weights on a unit sphere.\n" " There are num_sphere_quad[dim-1] points i, with the i-th point at\n" " (x,y,z) = (sphere_quad[dim-1][i][ 0, 1, 2 ]), and with a quadrature\n" " weight sphere_quad[dim-1][i][3]. */\n\n"); printf("#define NQUAD %d\n", MAX(NQUAD3, MAX(2, NQUAD2))); printf("static const int num_sphere_quad[3] = { %d, %d, %d };\n\n", 2, NQUAD2, NQUAD3); printf("static const double sphere_quad[3][NQUAD][4] = {\n"); printf(" { {1,0,0,0.5}, {-1,0,0,0.5} },\n"); for (i = 0; i < NQUAD2; ++i) { if (i == 0) { x2[i] = 1; y2[i] = 0; } else if (2*i == NQUAD2) { x2[i] = -1; y2[i] = 0; } else if (4*i == NQUAD2) { y2[i] = 1; x2[i] = 0; } else if (4*i == 3*NQUAD2) { y2[i] = -1; x2[i] = 0; } else { x2[i] = cos(2*i * K_PI / NQUAD2); y2[i] = sin(2*i * K_PI / NQUAD2); } z2[i] = 0.0; w2[i] = 1.0 / NQUAD2; } sort_by_distance(NQUAD2,x2,y2,z2,w2); printf(" {\n"); for (i = 0; i < NQUAD2; ++i) { printf(" { %0.20g, %0.20g, %0.20g, %0.20g },\n", x2[i], y2[i], z2[i], w2[i]); } printf(" },\n"); printf(" {\n"); spherical_quadrature_points(x3,y3,z3, w3, NQUAD3); sort_by_distance(NQUAD3,x3,y3,z3,w3); for (i = 0; i < NQUAD3; ++i) { printf(" { %0.20g, %0.20g, %0.20g, %0.20g },\n", x3[i], y3[i], z3[i], w3[i]); } printf(" }\n"); printf("};\n"); return 0; } mpb-1.5/depcomp0000755000175400001440000005601612235234727010452 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: mpb-1.5/TODO0000644000175400001440000000055112315325724007553 00000000000000Add more example files: more 3d crystals, strip waveguide, ... Export/import DXF, VRML, POV, ...? Import full epsilon tensor from a file. Make mpb-data pick default -n when -r is used. More eigensolver improvements...adaptive selection of an iteration technique? Try Jacobi-Davidson method with harmonic eigenvalues for targeted solver. World domination. mpb-1.5/utils/0000755000175400001440000000000012315341511010272 500000000000000mpb-1.5/utils/Makefile.am0000644000175400001440000000053612315326040012252 00000000000000if !MPI bin_PROGRAMS = mpb@MPB_SUFFIX@-data endif mpb@MPB_SUFFIX@_data_SOURCES = mpb-data.c mpb@MPB_SUFFIX@_data_LDADD = $(top_builddir)/src/matrixio/libmatrixio.a $(top_builddir)/src/libmpb@MPB_SUFFIX@.la mpb@MPB_SUFFIX@_data_CPPFLAGS = -I$(top_srcdir)/src/util -I$(top_srcdir)/src/matrices -I$(top_srcdir)/src/matrixio dist_man_MANS = mpb-data.1 mpb-1.5/utils/mpb-data.c0000644000175400001440000006736212315341423012063 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include #include #include #include "config.h" #include "check.h" #include "matrixio.h" int verbose = 0; /* A macro to set x = fractional part of x input, xi = integer part, with 0 <= x < 1.0. Note that we need the second test (if x >= 1.0) below, because x may start out as -0 or -1e-23 or something so that it is < 0 but x + 1.0 == 1.0, thanks to the wonders of floating point. (This has actually happened, on an Alpha.) */ #define MODF_POSITIVE(x, xi) { \ x=modf(x, &xi); \ if (x < 0) { x += 1.0; if (x >= 1.0) x = 0; else xi -= 1.0; } \ } #define ADJ_POINT(i1, i2, nx, dx, xi, xi2) { \ if (dx >= 0.0) { \ i2 = i1 + 1; \ if (i2 >= nx) { \ i2 -= nx; \ xi2 = xi + 1.0; \ } \ else \ xi2 = xi; \ } \ else { \ i2 = i1 - 1; \ if (i2 < 0) { \ i2 += nx; \ xi2 = xi - 1.0; \ } \ else \ xi2 = xi; \ dx = -dx; \ } \ } void add_cmplx_times_phase(real *sum_re, real *sum_im, real d_re, real d_im, double ix, double iy, double iz, real *s, real scale_by) { static real phase = 0.0, p_re = 1.0, p_im = 0.0; real new_phase; new_phase = ix * s[0] + iy * s[1] + iz * s[2]; if (new_phase != phase) { phase = new_phase; p_re = cos(phase); p_im = sin(phase); } *sum_re += (d_re * p_re - d_im * p_im) * scale_by; *sum_im += (d_re * p_im + d_im * p_re) * scale_by; } #define TWOPI 6.2831853071795864769252867665590057683943388 #define MAX2(a,b) ((a) >= (b) ? (a) : (b)) #define MIN2(a,b) ((a) < (b) ? (a) : (b)) void map_data(real *d_in_re, real *d_in_im, int n_in[3], real *d_out_re, real *d_out_im, int n_out[3], matrix3x3 coord_map, real *kvector, short pick_nearest, short transpose) { int i, j, k; real s[3]; /* phase difference per cell in each lattice direction */ real min_out_re = 1e20, max_out_re = -1e20, min_out_im = 1e20, max_out_im = -1e20; real shiftx, shifty, shiftz; CHECK(d_in_re && d_out_re, "invalid arguments"); CHECK((d_out_im && d_in_im) || (!d_out_im && !d_in_im), "both input and output must be real or complex"); coord_map.c0 = vector3_scale(1.0 / n_out[0], coord_map.c0); coord_map.c1 = vector3_scale(1.0 / n_out[1], coord_map.c1); coord_map.c2 = vector3_scale(1.0 / n_out[2], coord_map.c2); for (i = 0; i < 3; ++i) { if (kvector) s[i] = kvector[i] * TWOPI; else s[i] = 0; } /* Compute shift so that the origin of the output cell is mapped to the origin of the original primitive cell: */ shiftx = 0.5 - (coord_map.c0.x*0.5*n_out[0] + coord_map.c1.x*0.5*n_out[1] + coord_map.c2.x*0.5*n_out[2]); shifty = 0.5 - (coord_map.c0.y*0.5*n_out[0] + coord_map.c1.y*0.5*n_out[1] + coord_map.c2.y*0.5*n_out[2]); shiftz = 0.5 - (coord_map.c0.z*0.5*n_out[0] + coord_map.c1.z*0.5*n_out[1] + coord_map.c2.z*0.5*n_out[2]); for (i = 0; i < n_out[0]; ++i) for (j = 0; j < n_out[1]; ++j) for (k = 0; k < n_out[2]; ++k) { real x, y, z; double xi, yi, zi, xi2, yi2, zi2; double dx, dy, dz, mdx, mdy, mdz; int i1, j1, k1, i2, j2, k2; int ijk; if (transpose) ijk = (j * n_out[0] + i) * n_out[2] + k; else ijk = (i * n_out[1] + j) * n_out[2] + k; /* find the point corresponding to d_out[i,j,k] in the input array, and also find the next-nearest points. */ x = coord_map.c0.x*i + coord_map.c1.x*j + coord_map.c2.x*k + shiftx; y = coord_map.c0.y*i + coord_map.c1.y*j + coord_map.c2.y*k + shifty; z = coord_map.c0.z*i + coord_map.c1.z*j + coord_map.c2.z*k + shiftz; MODF_POSITIVE(x, xi); MODF_POSITIVE(y, yi); MODF_POSITIVE(z, zi); i1 = x * n_in[0]; j1 = y * n_in[1]; k1 = z * n_in[2]; dx = x * n_in[0] - i1; dy = y * n_in[1] - j1; dz = z * n_in[2] - k1; ADJ_POINT(i1, i2, n_in[0], dx, xi, xi2); ADJ_POINT(j1, j2, n_in[1], dy, yi, yi2); ADJ_POINT(k1, k2, n_in[2], dz, zi, zi2); /* dx, mdx, etcetera, are the weights for the various points in the input data, which we use for linearly interpolating to get the output point. */ if (pick_nearest) { /* don't interpolate */ dx = dx <= 0.5 ? 0.0 : 1.0; dy = dy <= 0.5 ? 0.0 : 1.0; dz = dz <= 0.5 ? 0.0 : 1.0; } mdx = 1.0 - dx; mdy = 1.0 - dy; mdz = 1.0 - dz; /* Now, linearly interpolate the input to get the output. If the input/output are complex, we also need to multiply by the appropriate phase factor, depending upon which unit cell we are in. */ #define IN_INDEX(i,j,k) ((i * n_in[1] + j) * n_in[2] + k) if (d_out_im) { d_out_re[ijk] = 0.0; d_out_im[ijk] = 0.0; add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i1,j1,k1)], d_in_im[IN_INDEX(i1,j1,k1)], xi, yi, zi, s, mdx * mdy * mdz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i1,j1,k2)], d_in_im[IN_INDEX(i1,j1,k2)], xi, yi, zi2, s, mdx * mdy * dz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i1,j2,k1)], d_in_im[IN_INDEX(i1,j2,k1)], xi, yi2, zi, s, mdx * dy * mdz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i1,j2,k2)], d_in_im[IN_INDEX(i1,j2,k2)], xi, yi2, zi2, s, mdx * dy * dz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i2,j1,k1)], d_in_im[IN_INDEX(i2,j1,k1)], xi2, yi, zi, s, dx * mdy * mdz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i2,j1,k2)], d_in_im[IN_INDEX(i2,j1,k2)], xi2, yi, zi2, s, dx * mdy * dz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i2,j2,k1)], d_in_im[IN_INDEX(i2,j2,k1)], xi2, yi2, zi, s, dx * dy * mdz); add_cmplx_times_phase(d_out_re + ijk, d_out_im + ijk, d_in_re[IN_INDEX(i2,j2,k2)], d_in_im[IN_INDEX(i2,j2,k2)], xi2, yi2, zi2, s, dx * dy * dz); min_out_im = MIN2(min_out_im, d_out_im[ijk]); max_out_im = MAX2(max_out_im, d_out_im[ijk]); } else { d_out_re[ijk] = d_in_re[IN_INDEX(i1,j1,k1)] * mdx * mdy * mdz + d_in_re[IN_INDEX(i1,j1,k2)] * mdx * mdy * dz + d_in_re[IN_INDEX(i1,j2,k1)] * mdx * dy * mdz + d_in_re[IN_INDEX(i1,j2,k2)] * mdx * dy * dz + d_in_re[IN_INDEX(i2,j1,k1)] * dx * mdy * mdz + d_in_re[IN_INDEX(i2,j1,k2)] * dx * mdy * dz + d_in_re[IN_INDEX(i2,j2,k1)] * dx * dy * mdz + d_in_re[IN_INDEX(i2,j2,k2)] * dx * dy * dz; } min_out_re = MIN2(min_out_re, d_out_re[ijk]); max_out_re = MAX2(max_out_re, d_out_re[ijk]); #undef IN_INDEX } if (verbose) { printf("real part range: %g .. %g\n", min_out_re, max_out_re); if (d_out_im) printf("imag part range: %g .. %g\n", min_out_im, max_out_im); } } void handle_dataset(matrixio_id in_file, matrixio_id out_file, const char *name_re, const char *name_im, matrix3x3 Rout, matrix3x3 coord_map, real *kvector, double resolution, scalar_complex scaleby, real multiply_size[3], int pick_nearest, int transpose) { real *d_in_re = NULL, *d_in_im = NULL, *d_out_re = NULL, *d_out_im = NULL; int in_dims[3] = {1,1,1}, out_dims[3] = {1,1,1}, out_dims2[3], rank = 3; int i, N; int start[3] = {0,0,0}; matrixio_id data_id; char out_name[1000]; d_in_re = matrixio_read_real_data(in_file, name_re, &rank, in_dims, 0, 0, 0, NULL); if (!d_in_re) goto done; if (verbose) printf("Found dataset %s...\n", name_re); if (name_im) { d_in_im = matrixio_read_real_data(in_file, name_im, &rank, out_dims, 0, 0, 0, NULL); if (!d_in_im) { fprintf(stderr, "mpb-data: found %s dataset but not %s\n", name_re, name_im); goto done; } for (i = 0; i < 3; ++i) { CHECK(out_dims[i] == in_dims[i], "re/im datasets must have same size!"); } if (verbose) printf(" and imaginary part dataset %s...\n", name_im); } if (verbose) printf("Input data is rank %d, size %dx%dx%d.\n", rank, in_dims[0], in_dims[1], in_dims[2]); if (resolution > 0) { out_dims[0] = vector3_norm(Rout.c0) * resolution + 0.5; out_dims[1] = vector3_norm(Rout.c1) * resolution + 0.5; out_dims[2] = vector3_norm(Rout.c2) * resolution + 0.5; } else { for (i = 0; i < 3; ++i) out_dims[i] = in_dims[i] * multiply_size[i]; } for (i = rank; i < 3; ++i) out_dims[i] = 1; for (N = 1, i = 0; i < 3; ++i) N *= (out_dims[i] = MAX2(out_dims[i], 1)); if (transpose) { out_dims2[0] = out_dims[1]; out_dims2[1] = out_dims[0]; out_dims2[2] = out_dims[2]; } else { out_dims2[0] = out_dims[0]; out_dims2[1] = out_dims[1]; out_dims2[2] = out_dims[2]; } if (verbose) printf("Output data %dx%dx%d.\n", out_dims2[0], out_dims2[1], out_dims2[2]); CHK_MALLOC(d_out_re, real, N); if (d_in_im) { CHK_MALLOC(d_out_im, real, N); } map_data(d_in_re, d_in_im, in_dims, d_out_re, d_out_im, out_dims, coord_map, kvector, pick_nearest, transpose); if (d_out_im) { /* multiply * scaleby for complex data */ for (i = 0; i < N; ++i) { scalar_complex d; CASSIGN_SCALAR(d, d_out_re[i], d_out_im[i]); CASSIGN_MULT(d, scaleby, d); d_out_re[i] = CSCALAR_RE(d); d_out_im[i] = CSCALAR_IM(d); } } strcpy(out_name, name_re); if (out_file.id == in_file.id) strcat(out_name, "-new"); if (verbose) printf("Writing dataset to %s...\n", out_name); data_id = matrixio_create_dataset(out_file, out_name,"", rank, out_dims2); matrixio_write_real_data(data_id, out_dims2, start, 1, d_out_re); matrixio_close_dataset(data_id); if (d_out_im) { strcpy(out_name, name_im); if (out_file.id == in_file.id) strcat(out_name, "-new"); if (verbose) printf("Writing dataset to %s...\n", out_name); data_id = matrixio_create_dataset(out_file, out_name, "", rank, out_dims2); matrixio_write_real_data(data_id, out_dims2, start, 1, d_out_im); matrixio_close_dataset(data_id); } if (verbose) printf("Successfully wrote out data.\n"); done: free(d_in_re); free(d_in_im); free(d_out_re); free(d_out_im); } void handle_cvector_dataset(matrixio_id in_file, matrixio_id out_file, matrix3x3 Rout, matrix3x3 coord_map, matrix3x3 cart_map, real *kvector, double resolution, scalar_complex scaleby, real multiply_size[3], int pick_nearest, int transpose) { real *d_in[3][2] = { {0,0},{0,0},{0,0} }; int in_dims[3] = {1,1,1}, out_dims[3] = {1,1,1}, out_dims2[3], rank = 3; int i, N, dim, ri; int start[3] = {0,0,0}; matrixio_id data_id; for (dim = 0; dim < 3; ++dim) for (ri = 0; ri < 2; ++ri) { char nam[] = "x.r"; int dims[3] = {1,1,1}, rnk = 3; nam[0] = 'x' + dim; nam[2] = ri ? 'i' : 'r'; d_in[dim][ri] = matrixio_read_real_data(in_file, nam, &rnk, dims, 0, 0, 0, NULL); if (!d_in[dim][ri]) goto bad; if (!dim && !ri) { rank = rnk; for (i = 0; i < 3; ++i) in_dims[i] = dims[i]; } else { if (rank != rnk || in_dims[0] != dims[0] || in_dims[1] != dims[1] || in_dims[2] != dims[2]) goto bad; } } if (verbose) printf("Found complex vector dataset...\n"); if (verbose) printf("Input data is rank %d, size %dx%dx%d.\n", rank, in_dims[0], in_dims[1], in_dims[2]); /* rotate vector field according to cart_map */ if (verbose) printf("Rotating vectors by matrix [ %10f%10f%10f\n" " %10f%10f%10f\n" " %10f%10f%10f ]\n", cart_map.c0.x, cart_map.c1.x, cart_map.c2.x, cart_map.c0.y, cart_map.c1.y, cart_map.c2.y, cart_map.c0.z, cart_map.c1.z, cart_map.c2.z); N = in_dims[0] * in_dims[1] * in_dims[2]; for (ri = 0; ri < 2; ++ri) for (i = 0; i < N; ++i) { vector3 v; v.x = d_in[0][ri][i]; v.y = d_in[1][ri][i]; v.z = d_in[2][ri][i]; v = matrix3x3_vector3_mult(cart_map, v); d_in[0][ri][i] = v.x; d_in[1][ri][i] = v.y; d_in[2][ri][i] = v.z; } if (resolution > 0) { out_dims[0] = vector3_norm(Rout.c0) * resolution + 0.5; out_dims[1] = vector3_norm(Rout.c1) * resolution + 0.5; out_dims[2] = vector3_norm(Rout.c2) * resolution + 0.5; } else { for (i = 0; i < 3; ++i) out_dims[i] = in_dims[i] * multiply_size[i]; } for (i = rank; i < 3; ++i) out_dims[i] = 1; for (N = 1, i = 0; i < 3; ++i) N *= (out_dims[i] = MAX2(out_dims[i], 1)); if (transpose) { out_dims2[0] = out_dims[1]; out_dims2[1] = out_dims[0]; out_dims2[2] = out_dims[2]; } else { out_dims2[0] = out_dims[0]; out_dims2[1] = out_dims[1]; out_dims2[2] = out_dims[2]; } if (verbose) printf("Output data %dx%dx%d.\n", out_dims2[0], out_dims2[1], out_dims2[2]); for (dim = 0; dim < 3; ++dim) { real *d_out_re, *d_out_im; char nam[] = "x.r-new"; CHK_MALLOC(d_out_re, real, N); CHK_MALLOC(d_out_im, real, N); map_data(d_in[dim][0], d_in[dim][1], in_dims, d_out_re, d_out_im, out_dims, coord_map, kvector, pick_nearest, transpose); for (i = 0; i < N; ++i) { /* multiply * scaleby */ scalar_complex d; CASSIGN_SCALAR(d, d_out_re[i], d_out_im[i]); CASSIGN_MULT(d, scaleby, d); d_out_re[i] = CSCALAR_RE(d); d_out_im[i] = CSCALAR_IM(d); } nam[0] = 'x' + dim; if (out_file.id != in_file.id) nam[3] = 0; if (verbose) printf("Writing dataset to %s...\n", nam); data_id = matrixio_create_dataset(out_file, nam,"", rank, out_dims2); matrixio_write_real_data(data_id, out_dims2, start,1, d_out_re); matrixio_close_dataset(data_id); nam[2] = 'i'; if (verbose) printf("Writing dataset to %s...\n", nam); data_id = matrixio_create_dataset(out_file, nam,"", rank, out_dims2); matrixio_write_real_data(data_id, out_dims2, start,1, d_out_im); matrixio_close_dataset(data_id); if (verbose) printf("Successfully wrote out data.\n"); } for (dim = 0; dim < 3; ++dim) for (ri = 0; ri < 2; ++ri) free(d_in[dim][ri]); return; bad: for (dim = 0; dim < 3; ++dim) for (ri = 0; ri < 2; ++ri) free(d_in[dim][ri]); /* try individual datasets */ for (dim = 0; dim < 3; ++dim) { char namr[] = "x.r"; char nami[] = "x.i"; namr[0] = 'x' + dim; nami[0] = 'x' + dim; handle_dataset(in_file, out_file, namr, nami, Rout, coord_map, kvector, resolution, scaleby, multiply_size, pick_nearest, transpose); namr[1] = 0; handle_dataset(in_file, out_file, namr, NULL, Rout, coord_map, kvector, resolution, scaleby, multiply_size, pick_nearest, transpose); } } void handle_file(const char *fname, const char *out_fname, const char *data_name, int rectify, int have_ve, vector3 ve, double resolution, scalar_complex scaleby, real multiply_size[3], int pick_nearest, int transpose) { matrixio_id in_file, out_file; real *R, *kvector, *copies; int dims[2], rank; matrix3x3 Rin = {{1,0,0},{0,1,0},{0,0,1}}, Rout, coord_map; matrix3x3 cart_map = {{1,0,0},{0,1,0},{0,0,1}}; #define NUM_DATANAMES 13 char datanames[NUM_DATANAMES][30] = { "data", "epsilon.xx", "epsilon.xy", "epsilon.xz", "epsilon.yy", "epsilon.yz", "epsilon.zz", "epsilon_inverse.xx", "epsilon_inverse.xy", "epsilon_inverse.xz", "epsilon_inverse.yy", "epsilon_inverse.yz", "epsilon_inverse.zz" }; int i; if (verbose) printf("Reading file %s...\n", fname); in_file = matrixio_open(fname, out_fname != NULL); if (data_name && !data_name[0]) data_name = NULL; R = matrixio_read_data_attr(in_file, "lattice vectors", &rank, 2, dims); if (R && rank == 2 && dims[0] == 3 && dims[1] == 3) { Rin.c0.x = R[0*3+0]; Rin.c0.y = R[0*3+1]; Rin.c0.z = R[0*3+2]; Rin.c1.x = R[1*3+0]; Rin.c1.y = R[1*3+1]; Rin.c1.z = R[1*3+2]; Rin.c2.x = R[2*3+0]; Rin.c2.y = R[2*3+1]; Rin.c2.z = R[2*3+2]; if (verbose) printf("Read lattice vectors.\n"); } free(R); kvector = matrixio_read_data_attr(in_file, "Bloch wavevector", &rank, 1, dims); if (rank != 1 || dims[0] != 3) { free(kvector); kvector = NULL; } else if (verbose) printf("Read Bloch wavevector (%g, %g, %g)\n", kvector[0], kvector[1], kvector[2]); copies = matrixio_read_data_attr(in_file, "lattice copies", &rank, 1, dims); if (copies && rank == 1 && dims[0] == 3) { Rin.c0 = vector3_scale(copies[0], Rin.c0); Rin.c1 = vector3_scale(copies[1], Rin.c1); Rin.c2 = vector3_scale(copies[2], Rin.c2); if (kvector) { kvector[0] *= copies[0]; kvector[1] *= copies[1]; kvector[2] *= copies[2]; } if (verbose) printf("Read lattice copies (%g, %g, %g)\n", copies[0], copies[1], copies[2]); } free(copies); if (verbose) printf("Input lattice = (%g,%g,%g), (%g,%g,%g), (%g,%g,%g)\n", Rin.c0.x, Rin.c0.y, Rin.c0.z, Rin.c1.x, Rin.c1.y, Rin.c1.z, Rin.c2.x, Rin.c2.y, Rin.c2.z); Rout = Rin; if (rectify) { double V; /* Orthogonalize the output lattice vectors. If have_ve is true, then the first new lattice vector should be in the direction of the ve unit vector; otherwise, the first new lattice vector is the first original lattice vector. Note that we do this in such a way as to preserve the volume of the unit cell, and so that our first vector (in the direction of ve) smoothly interpolates between the original lattice vectors. */ if (have_ve) ve = unit_vector3(ve); else ve = unit_vector3(Rout.c0); /* First, compute c0 in the direction of ve by smoothly interpolating the old c0/c1/c2 (formula is slightly tricky): */ V = vector3_dot(vector3_cross(Rout.c0, Rout.c1), Rout.c2); Rout.c1 = vector3_minus(Rout.c1,Rout.c0); Rout.c2 = vector3_minus(Rout.c2,Rout.c0); Rout.c0 = vector3_scale(V / vector3_dot(vector3_cross(Rout.c1, Rout.c2), ve), ve); /* Now, orthogonalize c1 and c2: */ Rout.c1 = vector3_minus(Rout.c1, vector3_scale(vector3_dot(ve, Rout.c1), ve)); Rout.c2 = vector3_minus(Rout.c2, vector3_scale(vector3_dot(ve, Rout.c2), ve)); Rout.c2 = vector3_minus(Rout.c2, vector3_scale(vector3_dot(Rout.c1, Rout.c2) / vector3_dot(Rout.c1, Rout.c1), Rout.c1)); cart_map.c0 = unit_vector3(Rout.c0); cart_map.c1 = unit_vector3(Rout.c1); cart_map.c2 = unit_vector3(Rout.c2); cart_map = matrix3x3_inverse(cart_map); } if (transpose) { /* swap first two rows of cart_map */ vector3 v; cart_map = matrix3x3_transpose(cart_map); v = cart_map.c0; cart_map.c0 = cart_map.c1; cart_map.c1 = v; cart_map = matrix3x3_transpose(cart_map); } Rout.c0 = vector3_scale(multiply_size[0], Rout.c0); Rout.c1 = vector3_scale(multiply_size[1], Rout.c1); Rout.c2 = vector3_scale(multiply_size[2], Rout.c2); if (verbose) printf("Output lattice = (%g,%g,%g), (%g,%g,%g), (%g,%g,%g)\n", Rout.c0.x, Rout.c0.y, Rout.c0.z, Rout.c1.x, Rout.c1.y, Rout.c1.z, Rout.c2.x, Rout.c2.y, Rout.c2.z); coord_map = matrix3x3_mult(matrix3x3_inverse(Rin), Rout); if (out_fname) { if (verbose) printf("Creating output file %s...\n", out_fname); out_file = matrixio_create(out_fname); } else { if (verbose) printf("Writing output datasets to input file %s...\n", fname); out_file = in_file; } for (i = 0; i < NUM_DATANAMES; ++i) { const char *dname = datanames[i]; char name_re[300], name_im[300]; if (data_name) dname = data_name; strcpy(name_re, dname); handle_dataset(in_file, out_file, name_re, NULL, Rout, coord_map, kvector, resolution, scaleby, multiply_size, pick_nearest, transpose); sprintf(name_re, "%s.r", dname); sprintf(name_im, "%s.i", dname); handle_dataset(in_file, out_file, name_re, name_im, Rout, coord_map, kvector, resolution, scaleby, multiply_size, pick_nearest, transpose); if (data_name) break; } /* handle complex vector fields x.{ri}, y.{ri}, z.{ri} */ handle_cvector_dataset(in_file, out_file, Rout, coord_map, cart_map, kvector, resolution, scaleby, multiply_size, pick_nearest, transpose); free(kvector); matrixio_close(in_file); if (out_file.id != in_file.id) matrixio_close(out_file); } void usage(FILE *f) { fprintf(f, "Usage: mpb-data [options] []\n" "Options:\n" " -h : this help message\n" " -V : print version number and copyright\n" " -v : verbose output\n" " -o : output to (first input file only)\n" " -r : output rectangular cell\n" " -e : as -r, but first axis of cell is along \n" " -n : output resolution of n grid points per a\n" " -x \n" " -y \n" " -z : output mx/my/mz periods in the x/y/z directions\n" " -P : multiply phase shift of degrees\n" " -m : same as -x -y -z \n" " -T : transpose first two dimensions (x & y) of data\n" " -p : pixellized output (no grid interpolation)\n" " -d : use dataset in the input files (default: all mpb datasets)\n" " -- you can also specify a dataset via :\n" ); } /* given an fname of the form :, return a pointer to a newly-allocated string containing , and point data_name to the position of in fname. The user must free() the string. */ static char *split_fname(char *fname, char **data_name) { int fname_len; char *colon, *filename; fname_len = strlen(fname); colon = strchr(fname, ':'); if (colon) { int colon_len = strlen(colon); filename = (char*) malloc(sizeof(char) * (fname_len-colon_len+1)); CHECK(filename, "out of memory"); strncpy(filename, fname, fname_len-colon_len+1); filename[fname_len-colon_len] = 0; *data_name = colon + 1; } else { /* treat as if ":" were at the end of fname */ filename = (char*) malloc(sizeof(char) * (fname_len + 1)); CHECK(filename, "out of memory"); strcpy(filename, fname); *data_name = fname + fname_len; } return filename; } int main(int argc, char **argv) { char *out_fname = NULL, *data_name = NULL; int rectify = 0, have_ve = 0; double phaseangle = 0; double resolution = 0; vector3 ve = {1,0,0}; real multiply_size[3] = {1,1,1}; int pick_nearest = 0, transpose = 0; int ifile, c; extern char *optarg; extern int optind; scalar_complex scaleby = {1,0}, phase; while ((c = getopt(argc, argv, "hVvo:x:y:z:m:d:n:prTe:P:")) != -1) switch (c) { case 'h': usage(stdout); return EXIT_SUCCESS; case 'V': printf("mpb-data " PACKAGE_VERSION " by Steven G. Johnson.\n" "Copyright (C) 1999-2014 Massachusetts Institute of Technology.\n" "This is free software, and you are welcome to redistribute it under the\n" "terms of the GNU General Public License (GPL). mpb-data comes with\n" "ABSOLUTELY NO WARRANTY; see the GPL for more details.\n"); return EXIT_SUCCESS; case 'v': verbose = 1; break; case 'o': free(out_fname); out_fname = (char*) malloc(sizeof(char) * (strlen(optarg) + 1)); CHECK(out_fname, "out of memory"); strcpy(out_fname, optarg); break; case 'd': free(data_name); data_name = (char*) malloc(sizeof(char) * (strlen(optarg) + 1)); CHECK(data_name, "out of memory"); strcpy(data_name, optarg); break; case 'x': multiply_size[0] = atof(optarg); break; case 'y': multiply_size[1] = atof(optarg); break; case 'z': multiply_size[2] = atof(optarg); break; case 'm': multiply_size[0] = atof(optarg); multiply_size[1] = atof(optarg); multiply_size[2] = atof(optarg); break; case 'n': resolution = atof(optarg); CHECK(resolution > 0, "invalid resolution for -n (must be positive)"); break; case 'P': phaseangle = atof(optarg); break; case 'p': pick_nearest = 1; break; case 'T': transpose = 1; break; case 'e': have_ve = 1; if (3 != sscanf(optarg, "%lf,%lf,%lf", &ve.x, &ve.y, &ve.z)) { fprintf(stderr, "Invalid -e argument \"%s\"\n", optarg); usage(stderr); return EXIT_FAILURE; } rectify = 1; break; case 'r': rectify = 1; break; default: fprintf(stderr, "Invalid argument -%c\n", c); usage(stderr); return EXIT_FAILURE; } if (optind == argc) { /* no parameters left */ usage(stderr); return EXIT_FAILURE; } CASSIGN_SCALAR(phase, cos(TWOPI * phaseangle / 360.0), sin(TWOPI * phaseangle / 360.0)); CASSIGN_MULT(scaleby, scaleby, phase); for (ifile = optind; ifile < argc; ++ifile) { char *dname, *h5_fname; h5_fname = split_fname(argv[ifile], &dname); if (!dname[0]) dname = data_name; handle_file(h5_fname, out_fname, dname, rectify, have_ve, ve, resolution, scaleby, multiply_size, pick_nearest, transpose); if (out_fname) free(out_fname); out_fname = NULL; free(h5_fname); } free(data_name); return EXIT_SUCCESS; } mpb-1.5/utils/mpb-data.10000644000175400001440000001317012315341423011765 00000000000000.\" Copyright (C) 1999-2014 Massachusetts Institute of Technology. .\" .\" 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 .\" .TH MPB-DATA 1 "January 27, 2000" "MPB" "MIT Photonic-Bands Package" .SH NAME mpb-data \- transformations of HDF5 files output by MPB .SH SYNOPSIS .B mpb-data [\fIOPTION\fR]... [\fIHDF5FILE\fR]... .SH DESCRIPTION .PP ." Add any additional description here mpb-data is a utility to perform additional processing and transformations of HDF5 files output by MPB, the MIT Photonic-Bands program. In particular, it is designed to make the output more amenable to visualization by reformatting it into a rectangular grid, extending it to multiple periods, and rescaling the data. .PP MIT Photonic Bands (MPB) is a free program to compute the band structures (dispersion relations) and electromagnetic modes of periodic dielectric structures. .PP HDF5 is a free, portable binary format and supporting library developed by the National Center for Supercomputing Applications at the University of Illinois in Urbana-Champaign. A single .I h5 file can contain multiple data sets; by default, .I mpb-data operates on all of the MPB-produced datasets in the file, but this can be changed via the .B -d option, or by using the syntax \fIHDF5FILE:DATASET\fR. .PP .I mpb-data writes its output datasets as additional datasets in the input file(s), with "-new" appended to the dataset names. Alternatively, it can write its output to a separate file, specified by the .B -o option. .PP Note also that, by default, the output datasets are identical to the input datasets; you must use one or more of the options below to specify a transformation (e.g. the \fB\-r\fR/\fB\-e\fR and .B -n options are very useful). .SH OPTIONS .TP .B -h Display help on the command-line options and usage. .TP .B -V Print the version number and copyright info for mpb-data. .TP .B -v Verbose output. .TP \fB\-o\fR \fIfile\fR Write output datasets to .I file (for the first input file only) rather than as additional datasets in the input file(s) (the default). .TP .B -r Output a rectangular cell with the same volume as the cell of the input data. This option is particularly useful for visualizing data from non-orthogonal unit cells (e.g. a triangular lattice), as otherwise the data will appear skewed or warped in most graphics programs. This option should almost always be accompanied by the \fB\-n\fR option to ensure a uniform resolution. .TP \fB\-e\fR \fIx,y,z\fR As the \fB\-r\fR option, but also make the first axis of the output along the \fIx,y,z\fR direction (in Cartesian coordinates) instead of along the first lattice vector as for \fB\-r\fR. .TP \fB\-P\fR \fIphaseangle\fR For complex-valued datasets, this option causes the output values to be rotated by \fIphaseangle\fR degrees in the complex plane. That is, they are multiplied by exp(2 pi i \fIphaseangle\fR / 360). .TP \fB\-n\fR \fIn\fR Output .I n grid points per lattice unit ("a"). This is useful not only for interpolating to finer (or coarser) resolutions, but also to ensure that the resolution is uniform in each direction (to prevent the data from looking distorted when you visualize it). .TP \fB\-x\fR \fImx\fR, \fB\-y\fR \fImy\fR, \fB\-z\fR \fImz\fR This tells .I mpb-data to output multiple periods in the corresponding lattice directions. to use a particular slice of a two- or three-dimensional dataset. e.g. .B -x 3.2 causes the output of 3.2 periods in the first lattice direction. The default is to output only a single period. .TP \fB\-m\fR \fIs\fR Output .I s periods in each lattice direction; equivalent to: \fB\-x\fR \fIs\fR \fB\-y\fR \fIs\fR \fB\-z\fR \fIs\fR. .TP .B -T The output has the first two dimensions (x and y) transposed. This is useful in conjunction with the parallel (MPI) version of MPB, which for performance reasons outputs all arrays with the first two dimensions transposed. .B -T can undo this transposition. .TP .B -p Pixellized output. Normally, the input data is linearly interpolated to the output grid, but the .B -p option causes it to instead use the nearest grid point in the input data. This is useful, for example, if you want to study the discretization of the dielectric-function representation. .TP \fB\-d\fR \fIname\fR Use dataset .I name from the input files; otherwise, the first dataset from each file is used. Alternatively, use the syntax \fIHDF5FILE:DATASET\fR, which allows you to specify a different dataset for each file. You can use the .I h5ls command (included with hdf5) to find the names of datasets within a file. Note that this option is generally unnecessary, since mpb-data can already find the relevant dataset(s) for files created by MPB. Also, note that mpb-data treats the dataset specified by this option as a real scalar dataset and does not include the exp(ikx) factors when extending the dataset to multiple periods. .SH BUGS Send bug reports to S. G. Johnson, stevenj@alum.mit.edu. .SH AUTHORS Written by Steven G. Johnson. Copyright (c) 1999-2012 by the Massachusetts Institute of Technology. .SH "SEE ALSO" mpb(1) mpb-1.5/utils/Makefile.in0000644000175400001440000005555112315337034012277 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @MPI_FALSE@bin_PROGRAMS = mpb@MPB_SUFFIX@-data$(EXEEXT) subdir = utils DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(dist_man_MANS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_mpb@MPB_SUFFIX@_data_OBJECTS = \ mpb@MPB_SUFFIX@_data-mpb-data.$(OBJEXT) mpb@MPB_SUFFIX@_data_OBJECTS = $(am_mpb@MPB_SUFFIX@_data_OBJECTS) mpb@MPB_SUFFIX@_data_DEPENDENCIES = \ $(top_builddir)/src/matrixio/libmatrixio.a \ $(top_builddir)/src/libmpb@MPB_SUFFIX@.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(mpb@MPB_SUFFIX@_data_SOURCES) DIST_SOURCES = $(mpb@MPB_SUFFIX@_data_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mpb@MPB_SUFFIX@_data_SOURCES = mpb-data.c mpb@MPB_SUFFIX@_data_LDADD = $(top_builddir)/src/matrixio/libmatrixio.a $(top_builddir)/src/libmpb@MPB_SUFFIX@.la mpb@MPB_SUFFIX@_data_CPPFLAGS = -I$(top_srcdir)/src/util -I$(top_srcdir)/src/matrices -I$(top_srcdir)/src/matrixio dist_man_MANS = mpb-data.1 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mpb@MPB_SUFFIX@-data$(EXEEXT): $(mpb@MPB_SUFFIX@_data_OBJECTS) $(mpb@MPB_SUFFIX@_data_DEPENDENCIES) $(EXTRA_mpb@MPB_SUFFIX@_data_DEPENDENCIES) @rm -f mpb@MPB_SUFFIX@-data$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mpb@MPB_SUFFIX@_data_OBJECTS) $(mpb@MPB_SUFFIX@_data_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mpb@MPB_SUFFIX@_data-mpb-data.o: mpb-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@_data-mpb-data.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Tpo -c -o mpb@MPB_SUFFIX@_data-mpb-data.o `test -f 'mpb-data.c' || echo '$(srcdir)/'`mpb-data.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpb-data.c' object='mpb@MPB_SUFFIX@_data-mpb-data.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@_data-mpb-data.o `test -f 'mpb-data.c' || echo '$(srcdir)/'`mpb-data.c mpb@MPB_SUFFIX@_data-mpb-data.obj: mpb-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@_data-mpb-data.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Tpo -c -o mpb@MPB_SUFFIX@_data-mpb-data.obj `if test -f 'mpb-data.c'; then $(CYGPATH_W) 'mpb-data.c'; else $(CYGPATH_W) '$(srcdir)/mpb-data.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@_data-mpb-data.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpb-data.c' object='mpb@MPB_SUFFIX@_data-mpb-data.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@_data-mpb-data.obj `if test -f 'mpb-data.c'; then $(CYGPATH_W) 'mpb-data.c'; else $(CYGPATH_W) '$(srcdir)/mpb-data.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool cscopelist-am ctags-am distclean \ distclean-compile distclean-generic distclean-libtool distdir \ dvi dvi-am html html-am info info-am install install-am \ install-binPROGRAMS 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-man1 install-pdf install-pdf-am install-ps \ 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-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 # 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: mpb-1.5/ChangeLog0000644000175400001440000052416012315341511010634 00000000000000commit 21209e603043b294c8254879ebffb54badfbb551 Author: Steven G. Johnson Date: Fri Mar 28 14:44:54 2014 -0400 copyright year update commit 15e5cdf5c91e2e09cf2f2c1b811571fb9144b68f Author: Steven G. Johnson Date: Fri Mar 28 14:43:23 2014 -0400 tentative 1.5 release date commit 2210edd8b70bd5af65cc6b9bdf47793babdc9a99 Author: Steven G. Johnson Date: Fri Mar 28 14:42:33 2014 -0400 more gitignore commit bc93cb0cf5291ea830e29a9270b95adf22fbed92 Author: Steven G. Johnson Date: Fri Mar 28 14:37:23 2014 -0400 more gitignore commit 58cb2d8518e239923edcf208e121eea0e66520aa Author: Steven G. Johnson Date: Fri Mar 28 14:26:37 2014 -0400 git conversion commit 9201d7db3b0fc5cd7a938592c22d4924640ca1e3 Author: stevenj Date: Fri Mar 28 11:29:01 2014 -0400 NEWS update commit c826971507f8d47f29fb2a9cfb3257505a8140b3 Author: stevenj Date: Fri Mar 28 11:26:42 2014 -0400 avoid some problems with sqmatrix_invert failing due too rounding errors (recurring "non positive-definite matrix in potrf" errors) commit 49475b206a23fe536cb9d18a21511c9961055e69 Author: stevenj Date: Tue Mar 26 16:10:20 2013 -0400 bug fix to first-brillouin-zone for recent guile versions (thanks to Ling Lu and Tingtao Zhou for the bug report) commit dede4b568fa38ff24b78f739704164de9e7b11d3 Author: stevenj Date: Thu Mar 7 15:48:19 2013 -0500 don't look for guile/gh.h in smob tests commit 3ba1f7473165f812725f3d7dc0d0db0fb2c06780 Author: stevenj Date: Tue Oct 16 10:25:26 2012 -0400 updated BLAS/LAPACK configure tests, use default autoconf F77 compiler list (find gfortran!!!!) commit 25835f01337d75bee26aec8af76c7f0e97b28cc3 Author: stevenj Date: Sat Aug 4 22:31:33 2012 -0400 copyright year update commit 6494e525f90946900c5c2cd77a8960c53a711c80 Author: stevenj Date: Sat Aug 4 22:27:55 2012 -0400 support Guile 2.x commit 54ab639e25d5691d65e7537f4e3bed90ac1dd9e0 Author: stevenj Date: Sat Aug 4 21:54:09 2012 -0400 updated NEWS commit 9e4933e59973a1a7e5c91f1b4e21e39a16770596 Author: stevenj Date: Sat Aug 4 21:14:43 2012 -0400 support FFTW3 MPI transforms commit 26a80fcfa4e6b3f09a598284ad133e724f796280 Author: stevenj Date: Sat Aug 4 17:57:22 2012 -0400 rm scm_must_malloc, which is deprecated, and in any case interacting with the Guile garbage-collector is more trouble than it is worth for most memory allocation commit fb7c2d126b025736466d07a7a72c6eda7d29721b Author: stevenj Date: Sat Aug 4 17:36:28 2012 -0400 fix matrixio operations to work with MPI HDF5 -- several operations were collective but were only being called on the master process commit 101ff113beae57b0fbd9034eb556ed57a9844f15 Author: stevenj Date: Thu Jul 26 15:42:33 2012 -0400 added experimental openmp support (run with --nthread n) commit 5881486cb48692e2f3dd7f8b090e779a12e02e6d Author: stevenj Date: Tue Jul 24 13:42:28 2012 -0400 don't include guile/gh.h commit e9ec080da87261d32d316ae765ce6afaf47c3615 Author: stevenj Date: Fri Jul 20 21:58:23 2012 -0400 silence HDF5 compiler warning, check for error in H5Pset_fapl_mpio commit d0d7e731456b6fe8eb052573601fbb2ced47b38e Author: stevenj Date: Fri Jul 20 20:43:42 2012 -0400 use libctl_quiet commit 4f64d0785553b612b3099040a32b77bde79a63cc Author: stevenj Date: Fri Jul 20 19:42:20 2012 -0400 fix to work with libctl 3.2.1 commit 84d23330c17829aaa139aa99a67def4672d51b29 Author: stevenj Date: Fri Jul 20 19:21:17 2012 -0400 small config and build fixes commit afcece15b1d92fda4403fe19ce79340ed8283155 Author: stevenj Date: Fri Jul 20 19:05:47 2012 -0400 elimination of obsolete guile gh_* routines commit 6286c757fc1ca645e800bd7378d5d8179626c8d5 Author: stevenj Date: Fri Jul 20 11:24:16 2012 -0400 fixes to compile serial MPB with parallel/MPI HDF5 commit 14f5147949ed25dee62de237c06daf71c61117a3 Author: stevenj Date: Thu May 31 16:51:05 2012 -0400 bug fix: make sure eps is properly initialized when mepsilon function fails commit 65b5fadea8059a7a65eef6a4c80b600f40476759 Author: stevenj Date: Thu May 31 15:50:30 2012 -0400 fix to compile without HDF5 commit d86540f4218d942ba1177cd172eb78ae861d80ce Author: stevenj Date: Mon Mar 7 13:01:17 2011 -0500 comment out meb stuff commit 3147f9fd9a92e3f4674fad1916daab312b2f7b70 Author: stevenj Date: Fri Feb 18 11:00:52 2011 -0500 add epsilon-func wrapper for material-func similar to meep commit 75133ac057af0d3e04213819252194d57f49ead9 Author: stevenj Date: Wed Feb 16 17:52:03 2011 -0500 more material-grid test cases: testing deps/du commit d74b5d944072fe6365d13c8f42f96c01c570b7f9 Author: stevenj Date: Wed Feb 16 17:51:20 2011 -0500 fix no-averaging case (it is commented out, but it is still nice to have it right) commit 5ee9cda162398b0c2d2076dcc338080aa497a2eb Author: stevenj Date: Tue Feb 15 17:55:04 2011 -0500 don't print out moment mesh, even in debuggin mode commit 93ee0b41673d98c6aa97cccbf143f1f8375d31ab Author: stevenj Date: Tue Dec 14 13:17:39 2010 -0500 fix compilation of MPI version commit 4e1c817dc351d3ef0cbc2aaf00613b33d25894b7 Author: kylkaren Date: Mon Dec 6 10:58:46 2010 -0500 vector3 is now inexact, convert back commit a78331ffd5dd135936dcdc22d05574818c342f3e Author: stevenj Date: Mon Sep 13 19:52:27 2010 -0400 bugfix: in evectmatrix routines that use scratch arrays, don't assume that scratch * 0 = 0, since scratch may be uninitialized ... explicitly initialize scratch to zero commit 0c6719b644ffa4fabf45ff0471af4b40f3c3fbee Author: stevenj Date: Fri May 1 10:09:51 2009 -0400 fix mpb-split (was missing first chunk of split data!) commit 4b789a0edcd7591889a32bfdbf8475d11f2b37d1 Author: stevenj Date: Sat Aug 23 14:00:25 2008 -0400 addec compute-1-group-velocity and compute-1-group-velocity-reciprocal commit 05c33b27dfde40f5bee399fbfa3718319cad1046 Author: stevenj Date: Sat Aug 23 13:32:06 2008 -0400 added compute-1-group-velocity-component commit 22d895f6afd4ab962138bf84dd3811a947e2752b Author: stevenj Date: Fri Aug 22 20:20:36 2008 -0400 renamed nlopt function commit eac34bba1da4a3bc40e76dcf862e5c16cc242f03 Author: stevenj Date: Thu Aug 21 00:30:33 2008 -0400 fix randomize-material-grid commit 25f8da2137ca3ea83cfbecb0ddef903cc42b8920 Author: stevenj Date: Wed Aug 20 20:54:19 2008 -0400 added material-grids-match-epsilon-file function to initialize the grids from an epsilon.h5 file, via optimization (cool!) commit ec72d3126eb0936f26a660baa5cba55308243a3d Author: stevenj Date: Wed Aug 20 17:52:42 2008 -0400 added load/save material grids commit e59a26786a20415c94321e72cedc87b5fb4d3d93 Author: stevenj Date: Wed Aug 20 15:30:46 2008 -0400 added serial option to matrixio interface commit 3d2e77c9c5aaf2c298b2223a46390fb60acd91a6 Author: stevenj Date: Wed Aug 20 14:28:32 2008 -0400 move material-grid optimization routines into separate file commit 90951babffc4fdfda184099eefef018458fbab82 Author: stevenj Date: Tue Aug 19 21:58:51 2008 -0400 use nonlinear constrained MMA alg. to do proper minimax gap optimization; seems to prevent it from getting stuck at degeneracies, although there are still local minima and some other annoyances commit 4fabb3e0f59253421d77c1f98eeb12af8f81bc70 Author: stevenj Date: Tue Aug 19 19:10:04 2008 -0400 comment typo commit d047bf6f0c434bb8b31da65baa9fddc03599bc8b Author: stevenj Date: Sat Aug 2 00:53:21 2008 -0400 check material-grid-kind when comparing grids for compatibiltiy commit d11aea726decb7e79ea22c102f046e704ee4e37e Author: stevenj Date: Thu Jul 31 23:47:30 2008 -0400 support 3 differnet kinds of material grids (more in the future) to experiment with different functions that have different disadvantages commit d8482bc5993b69e68b8fa1d18de45a73a6058132 Author: stevenj Date: Thu Jul 31 22:45:14 2008 -0400 use explicit Makefile for examples directory, so that ''make dist' doesn't pick up any random extra files I might have there commit cb3aaa1a285d0edfe69975ada113313616a2e763 Author: stevenj Date: Thu Jul 31 18:29:53 2008 -0400 different outputs when maximizing and minimizing commit 8a9e3dfb2b1a951cfa1e32cea7e38f322cab1d33 Author: stevenj Date: Thu Jul 31 18:08:08 2008 -0400 support for minimizing gaps (to get flat bands) as well as maximizing commit 9ab29f5d0a5713bf290f3b6a9b21f50b365cdd1c Author: stevenj Date: Thu Jul 31 02:55:49 2008 -0400 u=0 no longer causes problems commit 46c556e2597635dde636a3a2759d3b2428c41525 Author: stevenj Date: Thu Jul 31 01:30:47 2008 -0400 more-sensible mirror boundary conditions and centered pixels for linear interpolation in epsilon-from-file and material grids commit fc4a03794f578e17745386837c65d3c7115838df Author: stevenj Date: Thu Jul 31 00:55:15 2008 -0400 more accurate calculation of matgrid gradient, use min(u) rather than prod(u) to avoid stalling when multiple overlapping u's are zero commit 2344a62e21a188e90aed989d2f583405977dda4e Author: stevenj Date: Wed Jul 30 20:33:08 2008 -0400 bug fix for material_grid objects outside of primitive cell commit a2704dd74fe3902b032de525c8acdca5e0ab5ecf Author: stevenj Date: Wed Jul 30 02:48:52 2008 -0400 experimental material_grids_maxgap function commit 751395dd62085db3183c02ea8e64f3e83877b370 Author: stevenj Date: Wed Jul 30 00:20:10 2008 -0400 material grids now work with Guile 1.8; gradient is at least approximately right (really need to rethink how it is computed) commit 5e929d921834d572a5a88e4d579eb2dda2485f40 Author: stevenj Date: Sun Jul 27 13:49:28 2008 -0400 typo in ASSIGN_ESCALAR macro commit f9792508b986031a67502677b724a87c1257312f Author: stevenj Date: Sun Jul 27 13:36:45 2008 -0400 install mpb.h header with configuration details commit 892cc449d7415e93543828e71cdd75b1cf812f86 Author: stevenj Date: Sun Jul 27 02:39:07 2008 -0400 guard installed header files against C++ commit f7b86f61ee20d92be7db6308541e05462302ec6a Author: stevenj Date: Sun Jul 27 02:09:12 2008 -0400 fix fftw3 code with inversion symmetry; add code to handle case of out-of-place FFTs (although this is not used right now) commit c66010099d4a7d8f024b4477177657ecda5c0cc7 Author: stevenj Date: Sun Jul 27 01:28:05 2008 -0400 first stab at FFTW3 support (serial only) commit 30e76c4caca7c1e3b29666d8e7253f59daf561dd Author: stevenj Date: Sat Jul 19 13:32:12 2008 -0400 Debian and Ubuntu use /usr/share/libctl3 commit a1337a2cff857a74dede6c4db8e0cc96395d9628 Author: stevenj Date: Sat Apr 12 01:44:20 2008 -0400 support linking nlopt commit b392127bf2038981c95009f7522f97364133d61b Author: stevenj Date: Thu Apr 10 14:57:08 2008 -0400 bug fix in field-map!, thanks to Karen Lee for the bug report commit ca33d2c92eb10bae97ee5d6132cd60e5010c2f00 Author: stevenj Date: Sun Apr 6 20:30:26 2008 -0400 support HDF5 1.8 commit 6b48c1438675851ea37228ed12e7255e159aef89 Author: stevenj Date: Sun Apr 6 13:58:21 2008 -0400 better check for guile when guile-config not found, dno way to check how to activate readline when cross compiling commit 75f1840a7070e019641a4e916c98274185522967 Author: stevenj Date: Fri Dec 14 14:21:18 2007 -0500 check for ctl.h in /usr/include/ctl, the default under Fedora (grr) commit 2d1f3e9f9c25af6fb26bdb86137fc90767488900 Author: stevenj Date: Fri Aug 10 10:52:12 2007 -0400 update for submission to macro archive commit 6e2c0d9db2a618298c8f49e9c3446ff1b346e197 Author: stevenj Date: Fri Aug 10 10:40:00 2007 -0400 check for BLAS in vecLib, thanks to Tingnan Zhang for the bug report commit 60e3c888b32dc0cf631eb6c68592488120a105c8 Author: stevenj Date: Sat Jul 7 14:51:11 2007 -0400 added debugging check for Kottke algorithm, added check for zero normal vector in Kottke commit e64579195104a25ee2f62b628dbc3b5d0ce6e11f Author: stevenj Date: Mon Apr 16 19:12:02 2007 -0400 couple of fixes in Kottke case; added no-averaging option (commented out) commit 901a1788e0162254a929ef2de6fe1f0ed0fcce1d Author: stevenj Date: Thu Apr 5 16:29:18 2007 -0400 Kottke averaging patch (truly 2nd-order for anisotropic, as opposed to previous heuristic) commit 20a49f65eed6b0777c8ed861f5163a8d3a26ca2d Author: stevenj Date: Thu Mar 1 22:24:30 2007 -0500 allow disabling filename-prefix commit 8c41d9b3c08b9c4fc56559e9ce61130dd3a93369 Author: stevenj Date: Thu Feb 1 16:45:10 2007 -0500 support using a different k origin in find-k commit 1fa6a1b702d9ac27153d820403001c41469777be Author: stevenj Date: Thu Feb 1 16:44:13 2007 -0500 add mpi-max function for Karen commit 5c899edc7b6444b471326d709bde696ca10f50ae Author: stevenj Date: Wed Nov 22 12:25:44 2006 -0500 use vector3-close? for output-at-kpoint to avoid rounding problems reported on mailing list commit de5ac9e3e2ce434bbbc6b8c8e5d1e375f5f834c7 Author: stevenj Date: Tue Nov 21 14:43:29 2006 -0500 add wavevector-diagram example code commit 58ed36d9f697e478a9a033633c645e4829dc5a8d Author: stevenj Date: Thu Nov 9 13:42:44 2006 -0500 clarification commit 70b796e8e48db598874ebec3598194c6f27d35c8 Author: stevenj Date: Thu Nov 9 13:41:54 2006 -0500 typo commit c7ffd394707dc26a12698a65de50e2036c418c08 Author: stevenj Date: Mon May 29 16:18:13 2006 -0400 same typo, grrr commit c2f16f9871f84b41cde385df4ce08d1d427dcdae Author: stevenj Date: Mon May 29 16:16:22 2006 -0400 typo commit c9a54e598a2ef2deaba5959c5582d730ae81f341 Author: stevenj Date: Mon May 29 16:01:12 2006 -0400 material_grid stuf commit e9a36347843c59da2ec7050229fef0be865e901a Author: stevenj Date: Mon May 29 16:00:45 2006 -0400 more stuff commit c17b309e6478f524e47886d59f15aee8eb3e5b9a Author: stevenj Date: Mon May 29 15:59:08 2006 -0400 checked in eigensolver_lagrange stuff commit 8c2702e35ccbd819eba26992fc31aded9c455ff1 Author: stevenj Date: Fri Apr 7 01:52:13 2006 -0400 detect case where we are already at minimum commit ac245e22e8baf9e37ee3c9ce6d0b5a35827923a5 Author: stevenj Date: Tue Apr 4 17:58:05 2006 -0400 -lgen required for basename/dirname on SGI commit c004f7839e8b51f1134f2ae0660c5ed36c0070fd Author: stevenj Date: Mon Feb 13 01:54:58 2006 -0500 checked in compute-field-squared commit 95cb388208d6535bf956f20016a3ce079bec1a25 Author: stevenj Date: Mon Feb 6 00:09:17 2006 -0500 spec file shoudl go in pkgdatadir commit beca7315772f4754cbfdc8fc9c19768b56376f38 Author: stevenj Date: Mon Feb 6 00:07:36 2006 -0500 more extended-prec stuff commit fd2df80ae72dd7cd534352e731a532cdffeef2cf Author: stevenj Date: Mon Feb 6 00:05:20 2006 -0500 more changes for extended-precision hack commit ca5463c370395a1283db41d1e96f6e372b07b04f Author: stevenj Date: Fri Jan 27 23:22:42 2006 -0500 maxwell_zparity/yparity must return double* to match type used for libctl output commit ad69cefb9453553e97a6ea68af00430e3b2b932a Author: stevenj Date: Fri Jan 27 23:11:54 2006 -0500 allow long-double type commit 471d7be6ec44dcd203680033bb9b9fec8cc97ddf Author: stevenj Date: Fri Jan 27 22:56:30 2006 -0500 add long double possibility commit 6466026223d82da6e1950a81025fdb6cb1d4a3db Author: stevenj Date: Wed Jan 11 00:17:29 2006 -0500 note that -d treats dataset as real scalar commit 59a02c3fd67b1b4487d31c3372d17f7b3d9de34d Author: stevenj Date: Mon Dec 5 17:37:47 2005 -0500 inversion-symmetry fixes commit f3aa7de1d3d05f7e925c7a6ca3d217c70e503a12 Author: stevenj Date: Tue Nov 8 18:50:02 2005 -0500 fix for vpath builds commit 947d60a94d5f3a43402386992b1441c69d1ef50f Author: stevenj Date: Sat Nov 5 16:54:14 2005 -0500 update for new libctl version which doesn't call shift_to_unit_cell on tree search functions commit 8dd5ed2f7186d8451570078f576bde6e8090a282 Author: stevenj Date: Sat Oct 22 23:45:45 2005 -0400 whoops, fixed suffix substitution commit 4718fa31958f66e552a6fd7b6f6b030c2f8725f6 Author: stevenj Date: Sat Oct 22 22:49:33 2005 -0400 properly underscore Makefile variables commit 3356fffef6ecfbc5bb53c1b113dc839a8e90c455 Author: stevenj Date: Tue Oct 11 23:18:03 2005 -0400 allow user to set filename-prefix to false to force it to be disabled commit 473af0dbd655509d9f022a4cf33be9c843eb777b Author: stevenj Date: Mon Oct 10 14:48:01 2005 -0400 added kinterpolate-uniform and optimize-grid-size!, and also use .ctl file name as default filename prefix commit b7b06b5fe8ec865850484cb1c748c2045f92e4f0 Author: stevenj Date: Sun Oct 9 13:37:01 2005 -0400 don't forget to install mpb.scm commit 589b2d0c61bb4053693efb5bf236fbb81c6b9088 Author: stevenj Date: Fri Sep 2 14:55:50 2005 -0400 update commit cec8637783f81e1e69b0af10fb039a9ae004073c Author: stevenj Date: Fri Aug 12 17:48:48 2005 -0400 add mpb-data -P option to change phase angle of output commit 1321c3d5ab4a9f94e5e579928b79f9344c5b53db Author: stevenj Date: Thu Jul 14 17:09:50 2005 -0400 added initial material-grid support (for use in optimization later) commit 3a6a8215f350e682e1798576087183896fb7b10a Author: stevenj Date: Sat Jun 25 16:34:44 2005 -0400 updated "correct" frequencies for new semi-analytical averaging method, which experiment proves to have better convergence than the old "meshing" method commit 319826ac808490054b5d3db39c29747c9d9c728a Author: stevenj Date: Sat Jun 25 16:16:55 2005 -0400 fix directory compilation order (util/ first) commit 0f0472fecf6df686beff20f0c233f1bf2601b439 Author: stevenj Date: Thu Jun 9 23:55:34 2005 -0400 implemented mean_epsilon function for MPB; seems to help convergence slightly (big difference in 1d, more regular and slightly better in 2d/3d) and also seems to be much faster in 3d commit 3299b2f30e8515581b288d1ef763b3a940b33c09 Author: stevenj Date: Tue Jun 7 14:56:17 2005 -0400 unlike Meep, in 1d we have the x dimension, not z commit 62d1e9dbca8916832b6a6a4a1135625242b1ffb6 Author: stevenj Date: Mon Jun 6 22:14:30 2005 -0400 preparation for analytical calculation of mean & normal commit ff16ffe1db6c25d8da67d087c9e61cd2a9a440f4 Author: stevenj Date: Mon Jun 6 21:20:46 2005 -0400 ctl-io.[ch] depends on geom.scm commit 4e49a48be425edd79988fcf3de12a674cc9630c5 Author: stevenj Date: Mon Jun 6 21:19:20 2005 -0400 move to new adjacency-sorted spherical quadrature code, in preparation for upcoming switch to analytical normal vectors commit e6284d6128c1e90fa6ac5380e2eb65dcf1d8454e Author: stevenj Date: Mon Jun 6 18:44:32 2005 -0400 ctl-io.[ch] must depend on geom.scm commit f0cdd3be15d0d20d53fb159b2b0ab71a17eccab1 Author: stevenj Date: Mon Jun 6 12:30:19 2005 -0400 test new normal_to_object function in libctlgeom commit fc9a888a0007359d662894686401a5a41a7f8b52 Author: stevenj Date: Fri Jun 3 17:37:20 2005 -0400 some fixes for exceptional cases in normal_vectors test commit f70768709effce6ed45bb6bbf9b7cab51e9f753b Author: stevenj Date: Fri Jun 3 16:46:57 2005 -0400 don't run maxwell_test in MPI; remove Makefile.in from darcs commit 95d12e2b3b9803668c4c7a88b98a41f71d944eba Author: stevenj Date: Fri Jun 3 16:22:09 2005 -0400 update for libctl 3.0; also eliminate a number of compiler warnings commit 49e2158ac4787ef0c11d9712ea923180963c7eee Author: stevenj Date: Thu Jun 2 20:22:00 2005 -0400 use slightly modified averaging mesh suggested by Mischa Megens commit eba6572c202871bc4a24626bb2442f5ebac20720 Author: stevenj Date: Thu Jun 2 20:06:02 2005 -0400 bugfix for first-brillouin-zone-k by Mischa Megens commit f28351aad59bb1d14ec7b25d086f027b62119ecb Author: stevenj Date: Thu Jun 2 00:36:12 2005 -0400 convert to use automake, install libmpb library commit 9873898c7a55f254896beed916ece6ba4dd1fb42 Author: stevenj Date: Wed Feb 2 17:50:16 2005 -0500 not that output-field outputs Cartesian components commit 1c1aabb73828343615c58d488f323eb44157b555 Author: stevenj Date: Thu Nov 11 19:30:47 2004 -0500 add MKL checks to acx_blas/lapack commit 81f9970a796541332521b45052f66aa02a772d89 Author: stevenj Date: Thu Nov 11 19:30:18 2004 -0500 bug fix in find-k commit 637678c84de01c577af1081edb7e521152e748ac Author: stevenj Date: Fri Nov 5 17:43:23 2004 -0500 added mpxlC_r commit de8ab2cf97ff1fe72d6c0f87af1a230b1559b739 Author: stevenj Date: Fri Nov 5 17:42:33 2004 -0500 added some more compiler names (thanks also to Ralf Wildenhues for more C++ names) commit 742d7bd4df7eb5434c71f2213159598ad25d8183 Author: stevenj Date: Fri Oct 29 22:10:51 2004 -0400 bug fix -- don't use run-zeven/zodd if substrate is not air (thanks to Aosheng Rong) commit ef99b3c0913ceb17c765b974a17ea75d9e8f887a Author: stevenj Date: Tue Oct 26 21:11:13 2004 -0400 remove phase shift from get-field and compute-field-integral fields relative to outputted fields; thanks to Jim West for the bug report commit f5228f9ea47a3beeaf490dd594db26ec71497a47 Author: stevenj Date: Tue Oct 26 21:10:19 2004 -0400 slight rearrangement commit 6d63967a216f0eb476e27f0e1fafba13fc740e21 Author: stevenj Date: Fri Aug 27 21:34:33 2004 -0400 missing decl commit d62a2b8c56afe265bba2d63eb941a5f4c80a27c8 Author: stevenj Date: Fri Aug 27 21:33:29 2004 -0400 only use feenableexcept in debugging mode, and then only if available commit 67a429ddd234e001d42a69b8758684f076723680 Author: stevenj Date: Fri Aug 27 21:27:13 2004 -0400 whoops, bug fix: wrong k passed to av commit ae23cb80ec424147f40fa48e0b06c92fc5a2e093 Author: stevenj Date: Fri Aug 27 20:43:23 2004 -0400 no DOS line endings, dammit commit 480008542d09484cca4c233a146fcf856ea56460 Author: stevenj Date: Fri Aug 27 20:34:27 2004 -0400 don't divide by zero in preconditioner for Gamma point commit 8dfc3d935f66c20b5a47fc000d0f58c8d6873237 Author: maldovan Date: Fri Aug 27 19:37:18 2004 -0400 added MEB preconditioner commit f3d07e33bcbd884d1757f0820540e89a6087ecfb Author: stevenj Date: Wed Aug 11 03:48:47 2004 -0400 make a little wider so that it has two modes at 1.55um commit f9fbd34263f9a0b8e2dea575dab96771a40cb257 Author: stevenj Date: Wed Aug 11 03:42:52 2004 -0400 added strip waveguide example commit b97fb6e2905846d67007b6fc323a13e0bdcada41 Author: stevenj Date: Tue Aug 10 05:59:50 2004 -0400 added cscalar fields, compute-field-divergence, and thus bound charge density = div E commit a0fecbef65a6ae0eae8cf7bc5c4287c727f7e82e Author: stevenj Date: Tue Aug 10 01:50:13 2004 -0400 aiyaa, bug in evectmatrix_copy_slice for p != 1 commit 12ef85b1c82adfbf66ef70278334f78895db3ce9 Author: stevenj Date: Tue Aug 10 01:49:18 2004 -0400 silence warning commit fb1bcd4078bc4c20e350ca2c69fcfa378c3fa317 Author: stevenj Date: Fri Aug 6 00:00:21 2004 -0400 added missing tags, thanks to Mischa Megens commit 09ee595d088f80a75921e205c76a0f8de84aa156 Author: stevenj Date: Thu Jul 29 02:18:22 2004 -0400 analytically remove singularity at k=0 (i.e. zero-frequency solutions at Gamma) commit 563b8e465de09cf41302355211d81f63a3fe9f93 Author: stevenj Date: Thu Jul 29 00:52:56 2004 -0400 use FFTW instead of Numerical Recipes FFT in MEB commit 01c2280aa355185bd7236873eed2f6a68e2bf1a0 Author: stevenj Date: Wed Jul 28 23:46:33 2004 -0400 adde MEB elastic-band-structure code, early version (no preconditioner, etc) commit 652648c6700bf3a420325e205a620770da735e4b Author: stevenj Date: Wed Jul 28 23:45:45 2004 -0400 added hermitian checks, increased max eigensolver iters to 10^5 (from 10^4) commit fb236cfb94b1d917c69b0056544f706dcce68f90 Author: stevenj Date: Tue Jul 27 02:54:04 2004 -0400 added assert_hermitian commit cf0f67c02ab0ee9b17aac200a28c33b8f977ce45 Author: stevenj Date: Tue Jul 6 19:10:22 2004 -0400 handle vector fields properly under coordinate transformations commit 7267e3dd3756e6bb69d899239e373d7d7b5bf83c Author: stevenj Date: Tue Mar 2 22:21:40 2004 -0500 make resolution floating-point commit f29dd7d15b02c6b1f988fd901bfb18656a740595 Author: stevenj Date: Wed Dec 3 18:54:41 2003 -0500 clarification: find-k outputs k-dir in the usual reciprocal coords commit 999353b2defdeb42b75989e146a2481ea278739c Author: stevenj Date: Sun Nov 23 09:24:46 2003 -0500 note FFTW 2.x commit 62fb727d35fd24c72f5f432936b781287969517e Author: stevenj Date: Thu Sep 11 21:30:14 2003 -0400 clarification commit 3f09178eff6a5967268d06f203e5adc0ac479395 Author: stevenj Date: Fri Jul 25 19:08:18 2003 -0400 whoops, wrong dimensions for evectmatrixio commit aa91c6cb60520da88230968df04d04b96af256ec Author: stevenj Date: Thu May 15 02:54:07 2003 -0400 save compiler vars with AC_ARG_VAR commit 256b2d82252a6aa2e966610fec02fa157d48967d Author: stevenj Date: Wed Mar 5 01:14:58 2003 -0500 updated esr links commit 87673383897f7be0309f89c8ce00efe95d91ed2b Author: stevenj Date: Tue Mar 4 02:38:41 2003 -0500 bumped version for release commit e35692124e2281ce45f153df58730cd797b869e0 Author: stevenj Date: Thu Feb 27 23:03:41 2003 -0500 tense commit fd3741f9ca3f1cd7c8b36fb2881a2a31ab38bb07 Author: stevenj Date: Thu Feb 27 23:03:07 2003 -0500 updated commit c8381e2b1ee6447c00c4c71c050065b643fd7daf Author: stevenj Date: Thu Feb 27 22:49:25 2003 -0500 bug fix: kdir is in reciprocal coordinates. Thanks to Suxia (Susan) bug fix: kdir is in reciprocal coordinates. Thanks to Suxia (Susan) Yang for tracking down this bug. commit 1886b5642e632338e42c1abc63841a3c3d720025 Author: stevenj Date: Tue Feb 25 23:58:20 2003 -0500 fixed SunOS problem where guile 1/infinity and C 1/infinity give apparently different results...thanks to Benjamin Cowan for the bug report commit 595364e0d81997014e57d27edbcc4a99a82d529d Author: stevenj Date: Fri Feb 21 23:07:39 2003 -0500 change prompt to mpb> commit 0e09da87fb6a19d158bf174b739bd55aaff735d0 Author: stevenj Date: Tue Jan 21 01:19:21 2003 -0500 whoops commit 0ea0f5e230371f7c73004e86daa7061cee20b538 Author: stevenj Date: Tue Jan 21 01:15:29 2003 -0500 GaAs is n=11.56 commit 1c7cc9d42bd6c76379921ca99da861e8e0eaf24d Author: stevenj Date: Tue Dec 17 01:37:40 2002 -0500 fixed find-k for band-min != 0; thanks to M. Povinelli commit 0aa3653e1de15a9f769f3c19bb01fbcf04bced9f Author: stevenj Date: Sat Dec 14 10:27:42 2002 -0500 fix find-k to work for thunk band functions commit 6d83a543890d420547cc58a9b2ea2411997ac794 Author: stevenj Date: Tue Dec 3 16:56:44 2002 -0500 added k-interp commit 14de2e5a8b0bf3d92e5908d341906add0f1af27e Author: stevenj Date: Mon Dec 2 05:53:14 2002 -0500 use k-interp param commit c318f5d63f8ccbc46578ba3568356c28e6756de7 Author: stevenj Date: Sat Nov 2 18:21:26 2002 -0500 typo commit dd1184f4e414caf570ee64a99df761d3472e8b48 Author: stevenj Date: Thu Oct 24 06:08:52 2002 -0400 check for mpich lib commit 61bb09b71aff2eddd943e60bc4337c9cde9abb07 Author: stevenj Date: Thu Sep 26 17:46:50 2002 -0400 added whitespace commit 431d0eac128f1ed4dea0d79f971d7cffede7076c Author: stevenj Date: Tue Sep 24 20:49:08 2002 -0400 slight comment fix commit 5dc7ded3fd390489d7a40c455eae29e7dcd28938 Author: stevenj Date: Tue Sep 24 20:48:10 2002 -0400 fixed punctuation commit 1516361a83d7f5727f948860918ea621c80d32e5 Author: stevenj Date: Tue Sep 24 20:46:18 2002 -0400 use new acx_mpi.m4 commit f36af1b5060cde604391348960302085f2ec65d8 Author: stevenj Date: Fri Sep 20 17:52:13 2002 -0400 freqs: line should list headings as "k1, k2, k3" instead of "kx, ky, freqs: line should list headings as "k1, k2, k3" instead of "kx, ky, kz" since they are in reciprocal-lattice, not cartesian, coords. Thanks to Theis Peter Hanson for the suggestion. commit fb5acf069db683fff5da771045e758ff5af1435c Author: stevenj Date: Tue Sep 17 04:46:49 2002 -0400 don't resize lattice basis for grid-size==1 unless no-size specified; thanks to Tairan Wang commit 5fb94fb70c353e6330622ecd7397a70fb75bd8be Author: stevenj Date: Sun Sep 15 03:54:37 2002 -0400 updated commit 383abafb0dce29a941368dc2d5e46881ee6249cd Author: stevenj Date: Sun Sep 15 03:36:11 2002 -0400 whoops, take absolute value of Rm determinant for volume; thanks to Rumen Iliew for the bug report commit b5af36e7d015a4fad312f5903ec948c9cef8174d Author: stevenj Date: Sun Sep 15 00:12:51 2002 -0400 improved smob compatibility...grrr, damn guile commit f6fc6ed6899e3806eea34c16fc5f62dc785d5231 Author: stevenj Date: Sat Sep 14 23:20:55 2002 -0400 put my CPPFLAGS *first*; thanks to Cazimir G. Bostan for the bug report commit 8249ef1dc1351fed99d20a36ab4b5f571ee59e82 Author: stevenj Date: Fri Sep 13 22:04:44 2002 -0400 include field-smob.h commit d4f68528ff69bfe46627018020b0e9d8fd42ac89 Author: stevenj Date: Fri Sep 13 20:16:46 2002 -0400 updated commit 8d314ce86386443783d241f83104cdba4cd5f0ed Author: stevenj Date: Fri Sep 13 20:12:21 2002 -0400 whoops commit 441de464a922a6b6522b8933a383557839dfdc07 Author: stevenj Date: Fri Sep 13 20:09:35 2002 -0400 guile-1.3.4 has scm_make_smob_type but not SCM_SMOB_PREDICATE (sigh) commit 1bf09e6a9a1a1a116aa8e95a7cf8d837f7658c9e Author: stevenj Date: Fri Sep 13 19:27:35 2002 -0400 whoops, fix guile 1.3 smob support commit 376133d31f8b7eb9c3993cc52fe0397b5bdf6ff1 Author: stevenj Date: Fri Sep 13 04:15:53 2002 -0400 dated release commit e5f8272d1e1824c078e02ff2ecbee6db977ebec8 Author: stevenj Date: Fri Sep 13 03:37:53 2002 -0400 whoops commit d38ef62ff5b4299969348aaeeed92fac5aafb032 Author: stevenj Date: Wed Sep 11 07:51:27 2002 -0400 whoops commit 192e3393e7886dbe30ab1fab987ce5d8139fb51a Author: stevenj Date: Wed Sep 11 07:49:30 2002 -0400 made Bloch phase handling more sane, maybe...maybe I should just bite the bullet and include the phase in the loaded fields, at some point? commit d71c22d293c93c47c00e6044d9cf67eb0eb3daf3 Author: stevenj Date: Wed Sep 11 06:25:30 2002 -0400 whoops, no kvector for c fields commit 169e2deefbb2f7551236fe4fe1ca9c5bee7f0758 Author: stevenj Date: Wed Sep 11 05:44:26 2002 -0400 whoops commit dd6a21efdda3cb8be458acc94329095c4fe08eb4 Author: stevenj Date: Wed Sep 11 05:09:57 2002 -0400 bumped version commit 5b9565dcaa5e4fcacbb12bbd9821bb6d2b6fb64b Author: stevenj Date: Wed Sep 11 05:08:03 2002 -0400 use new Guile smob functions commit 2e25b80169cd05648372028214e1c2067eecf8b9 Author: stevenj Date: Wed Sep 11 03:53:58 2002 -0400 whoops commit 052628fa2131947926a3c315071425e73698096a Author: stevenj Date: Wed Sep 11 03:27:41 2002 -0400 documented and cleaned up new interfaces commit 414ff93bfb1977e8e431f848513ecd9f4108c77e Author: stevenj Date: Tue Sep 10 23:18:50 2002 -0400 include SCALAR_NUMVALS in c dimension, not p dimension commit f0714d4706711ec628238f2b55cd3b11c0606d3d Author: stevenj Date: Fri Sep 6 22:53:03 2002 -0400 updated commit 0d8e113f8aff28e6d519bff44e48713746ff9092 Author: stevenj Date: Tue Aug 27 23:18:37 2002 -0400 comment commit 725a11b417ab2b637e1c10fdfe775b2d2275e1a7 Author: stevenj Date: Tue Aug 27 19:52:22 2002 -0400 first arg to interpolate must be non-negative commit 06fde9a89028823758608a35b57e45ee9e15bc7c Author: stevenj Date: Tue Aug 27 19:49:40 2002 -0400 minor commit d0a05912a6a907e7e10457f2a0c0d8ad905ca84e Author: stevenj Date: Tue Aug 27 19:49:12 2002 -0400 fixed hyphenation commit 5f70798a5a07acfc86a694d0fb5722fef83cb089 Author: stevenj Date: Tue Aug 27 19:47:46 2002 -0400 credit Doug commit e4341886b689e8b30cae1bf47dbdd7afe622dd2f Author: stevenj Date: Tue Aug 27 19:40:43 2002 -0400 some fixes commit 7e5f11ade521ad5c76fb25e3bd240ec6baf6094c Author: stevenj Date: Tue Aug 27 19:34:20 2002 -0400 remove debugging print commit 382d316b4fc9f07ed63e303a2f0a87870b2cb0fe Author: stevenj Date: Tue Aug 27 19:30:14 2002 -0400 include dos.scm in example doc commit e23d31052aa080eeddacae82f6b1a51560a86065 Author: stevenj Date: Tue Aug 27 19:26:41 2002 -0400 added example density-of-states function commit 677b1854e19743f973a2b9002ae2ce6f90a99cdc Author: stevenj Date: Wed Jun 19 01:13:53 2002 -0400 whoops, find-k was outputting in reverse order commit 76d2a6328f47d1f90058ce78d3cd44be7f4e69d3 Author: stevenj Date: Thu Jun 13 04:54:09 2002 -0400 added find-k routine to solve for k's at a given a frequency commit 8cc42aa26beb4d0e4ea09b03f990fd23d34b21a6 Author: stevenj Date: Thu Jun 13 03:53:56 2002 -0400 don't print error if randomize-fields is called before init-params, so don't print error if randomize-fields is called before init-params, so that we can ensure that fields are random when calling run-parity without knowing whether run was already called. commit 2edec7bf42ecc1c3b7c7db86c6b6ef9c82578b84 Author: stevenj Date: Thu Jun 13 00:21:27 2002 -0400 print messages to remind when options like --with-inv-symmetry are set commit 6cb2e2ab16d98f588e7cdf3c2369cfa57edad2ee Author: stevenj Date: Tue Jun 11 03:07:21 2002 -0400 fixed handling of curfield='-' commit c467cb71faf9b690cfbcde36981b54ed37bbb6b1 Author: stevenj Date: Tue Jun 11 00:13:34 2002 -0400 whoops, fixed field normalization for non-unit cells commit 0ecd05fccad252908bb3ac88399ecf3a246ac304 Author: stevenj Date: Mon Jun 3 02:42:29 2002 -0400 warn if zlib is not found (thanks to Kevin Hennessy for the bug report) commit df5fde9face3be78b6ab9d326f8e272204d84cd9 Author: stevenj Date: Tue Apr 30 22:15:48 2002 -0400 fixed floating-point error on Alphas for homogeneous structures, fixed floating-point error on Alphas for homogeneous structures, reported by F. Lopez-Tejeira commit d5f72e001d86007ade66e209c1f7b4884f3dc68d Author: stevenj Date: Thu Apr 18 00:55:50 2002 -0400 make sure libctl is an appropriate version; thanks to Patricia Max for the suggestion commit db6b1d84bfe1d06398c7e5dbf30ced5385f4709b Author: stevenj Date: Wed Apr 3 20:50:40 2002 -0500 fixed error message (--with-hermitian-epsilon is not --with-hermitian-eps) commit 35230e891b27e2a6eac721569de61ae94e763b06 Author: stevenj Date: Wed Apr 3 20:27:19 2002 -0500 fix check of real epsilon-offdiag for non-hermitian-eps (thanks to Doug Allan) commit 4f145247b1a2450519a45ee4a7fb7e41a11e0e9a Author: stevenj Date: Sun Mar 24 08:43:46 2002 -0500 integrate-fields passes position vector commit 9b90b2cb487fc5addcc03d58ec51b16fadaef323 Author: stevenj Date: Sat Mar 23 19:50:44 2002 -0500 added assert_*_smob functions to replace SAFE_*, getting rid of many compiler warnings as well as CHECK statements commit 636d32a99ebbb6cc18c256ed6ec4979fe0822a7b Author: stevenj Date: Sat Mar 23 19:37:42 2002 -0500 use SCM2PTR, like Guile source, to be safe; still doesn't eliminate annoying warnings commit e35fb2afe5b00fe8a08ceb41df94c38d93b9727f Author: stevenj Date: Sat Mar 23 07:09:42 2002 -0500 fixed whoopses, added *-field-get-point (FIXME: handle arbitrary smobs) (FIXME: save k in smob?) commit 588fac5d3cbcab4fd621f05676aa6576e08813ab Author: stevenj Date: Sat Mar 23 06:46:09 2002 -0500 checked in fields.c (whoops) and RENORMALIZED FIELDS and INTEGRALS: all integrals are now integrals and not sums (i.e. we include the dV factor) and fields are properly unit-normalized commit d7ef9e4e0b6f7ca9ff53bee63a84fe5dbb2fcddb Author: stevenj Date: Fri Mar 22 08:53:01 2002 -0500 whoops commit c260acb5b85c0f6cd711a712c8b2858632fed534 Author: stevenj Date: Fri Mar 22 07:20:00 2002 -0500 added field-smob commit d6521ab53c046f6086dcfec19d029873a72bd70d Author: stevenj Date: Thu Mar 21 17:22:31 2002 -0500 use CHK_MALLOC commit 23f7a30595ee1f6a0a4875ef802bb20c5a4b3e11 Author: stevenj Date: Thu Mar 21 17:20:00 2002 -0500 whoops commit a42b52ec994673eb4a2c478cc751698d8dc0882f Author: stevenj Date: Thu Mar 21 17:13:03 2002 -0500 whoops commit 991a77353ae1c8ddc86d4119849fe17295e9fd01 Author: stevenj Date: Thu Mar 21 07:07:48 2002 -0500 allow very small imaginary part in scale_eigenvector for mpbi (since allow very small imaginary part in scale_eigenvector for mpbi (since we can get this in the phase-fixing routines just by fp error) commit 022f5da3c3e787060698d305c5bc70492ca866a2 Author: stevenj Date: Thu Mar 21 06:59:57 2002 -0500 get rid of debugging print commit cfdc9421147ecb558e7a144225f9d2b3995aa9a9 Author: stevenj Date: Thu Mar 21 06:58:35 2002 -0500 get rid of debugging printf commit cd8158c6176251197d594dc8127883ea0cdadef9 Author: stevenj Date: Thu Mar 21 06:02:18 2002 -0500 whoops commit 42dea61011dd5d1aa4cb4cae7e82bb42acd26d59 Author: stevenj Date: Thu Mar 21 04:18:07 2002 -0500 added evectmatrix/sqmatrix smobs and several new functions, split mpb.c source files, mpb-split now uses full path... commit 34c5ec2df4245b39ce74f3c44187f58ce2a7ff7d Author: stevenj Date: Wed Mar 20 21:21:58 2002 -0500 fixed Stroud code URL commit 750ffa23f926feddf4f12975658822dd10c47ec0 Author: stevenj Date: Tue Mar 19 02:42:01 2002 -0500 allow-negative-epsilon should use the targeted solver commit e5e002e31d2c30e2c8e176ce19141505eb90c1c2 Author: stevenj Date: Thu Mar 14 00:21:48 2002 -0500 man page cleanups, added mpb-split man page commit ffa60afdbc12d3e26ecf83fde6290aa8f1ca66d2 Author: stevenj Date: Wed Mar 13 23:53:22 2002 -0500 whoops, slight fix commit c62b3d5a05caa2288e3dd05379d5dafcb9c35e03 Author: stevenj Date: Wed Mar 13 23:52:48 2002 -0500 'make install' (and in particular, installing mpb-split) should not 'make install' (and in particular, installing mpb-split) should not write to the source directory. (This was biting me on NFS systems where root didn't have write access to my home directory.) commit 02a3b4fdef3249a1050c94478152b504982ed817 Author: stevenj Date: Wed Mar 13 23:49:41 2002 -0500 use mandir commit 140521c79da01bea1be3d85021713e151c014eff Author: stevenj Date: Wed Mar 13 01:29:10 2002 -0500 fixed OE url, added bibtex commit 5d9db80c75b557ed631727965d7bbee099a4e714 Author: stevenj Date: Mon Mar 11 17:04:13 2002 -0500 S. Lantz is at Cornell, not Corning. commit 75b1ee9f902b1fe76be8b144a0a6ea6c33680c96 Author: stevenj Date: Mon Mar 11 07:02:24 2002 -0500 whoops, updated copyright year commit 2fb2189e0cd632ff43b3c98d997fbd4290405a70 Author: stevenj Date: Mon Mar 11 01:35:24 2002 -0500 updated index commit 80c233dd2292e8cb667d3ec76a068744835f2ebe Author: stevenj Date: Mon Mar 11 00:49:46 2002 -0500 updated commit ab29cc3c4c83d20405c5cfb6f0fcbb859c512a80 Author: stevenj Date: Mon Mar 11 00:46:28 2002 -0500 included missing header commit f053d10fb6c2c75845c459ee581708a40ad27247 Author: stevenj Date: Mon Mar 11 00:45:27 2002 -0500 whoops, slight fix commit 8073a695c4301584c0242ccaf1e5365a1de1dbc0 Author: stevenj Date: Mon Mar 11 00:33:16 2002 -0500 added release date commit 2aa3221e57b1f76bc742350ff562326aa7751e13 Author: stevenj Date: Sun Mar 10 23:42:03 2002 -0500 fixed h5utils URL commit 01cdcf8fb30440f26d6738edc83083b534289432 Author: stevenj Date: Sat Mar 9 20:09:18 2002 -0500 added AUTHORS file to be GNU-ly correct commit 8602cd26a9ad8739772a1a7ed0f1f87779beb74b Author: stevenj Date: Fri Mar 8 01:42:27 2002 -0500 updated commit 12db07892ea211d69a32435b8f56792913df493c Author: stevenj Date: Fri Mar 8 01:39:19 2002 -0500 use ctl_fix_path on epsilon_input_file in case user is running ctl file from another directory (thanks to Alexey Yamilov for bugging me) commit b49f5f3e2eeca2b04f1dcb0a0a0bf1ad769ddf97 Author: stevenj Date: Thu Mar 7 22:30:45 2002 -0500 fix typo commit 19907d231eddd83ba902477bf1ed640a2a302fb7 Author: stevenj Date: Thu Mar 7 21:37:53 2002 -0500 noted no-size orthogonality commit 7482c5b98dd4fd43219875ca978b5ff07ee5fb5f Author: stevenj Date: Thu Mar 7 21:31:59 2002 -0500 fixed typo commit c29f6c80102be0bfd5364bfd9314a1755c4ccc51 Author: stevenj Date: Thu Mar 7 21:24:21 2002 -0500 updated version commit fa5f057f1feb195b7e8655d0c2dc15ffe4ab2f1a Author: stevenj Date: Thu Mar 7 21:08:25 2002 -0500 2002 copyright year update commit da78275b5f72195e3c887bd53ad1754fabfdc176 Author: stevenj Date: Thu Mar 7 21:07:59 2002 -0500 use Scheme complex numbers commit b198190ff77506d0ae0b3e29ec944cd1bc9c5db1 Author: stevenj Date: Thu Mar 7 07:28:27 2002 -0500 made usage of define-property consistent with latest rev. of libctl commit 1032461c8c84138464dd4ae0071379fcb8a8e125 Author: stevenj Date: Thu Mar 7 04:35:11 2002 -0500 used new h5topng syntax commit 794ef60890d4b7842ac6d80cc9493bdfc0cff291 Author: stevenj Date: Thu Mar 7 04:32:31 2002 -0500 documented grid-size -> resolution and updated output numbers in tutorials commit 5aa6c50fb1b5680db910702a629370068c14738e Author: stevenj Date: Wed Feb 27 22:07:57 2002 -0500 fixed bug in zdotc detection (thanks to Steve Lantz) commit 4c8bcb47fa138a23ac32eb5aaa98c80b72fe10f5 Author: stevenj Date: Wed Feb 27 22:06:51 2002 -0500 Added "Fun with Fortran" section (thanks to Steve Lantz for the suggestion). commit 35b1b8f2832f3a768c4677d66d7d7dc83103f585 Author: stevenj Date: Wed Feb 27 21:39:50 2002 -0500 Fixed bug that would cause compile failure with Fortran compilers Fixed bug that would cause compile failure with Fortran compilers using upper case. (Thanks to Steve Lantz of Corning.) commit f2e29169ab88c59ec898378669741a89be354edc Author: stevenj Date: Mon Feb 25 19:05:51 2002 -0500 check for lapack_rs6k library name commit 5cf7cb574a85d97c06d42a466eee0ef3f612462c Author: stevenj Date: Wed Feb 13 01:37:25 2002 -0500 updated commit 79b94fab89e9628097fedd10662be2b0ccb6bcf7 Author: stevenj Date: Tue Feb 12 19:18:47 2002 -0500 fixed (I think) conjugation in field routines...E is multiplied by i, so it is conjugated along with H commit e64f1100ebef7dadb5a3c078ccd52c5759fdb5a0 Author: stevenj Date: Sat Feb 9 20:11:45 2002 -0500 don't recommend referencing the web site commit 6dcb435c809e197f0c15ce0f22f008468bd8933b Author: stevenj Date: Mon Jan 21 20:32:12 2002 -0500 fixed typo (thanks, Mihai) commit 165d67b1c366f0ea1a23ced9e62506f46deb0251 Author: stevenj Date: Sat Jan 19 06:18:24 2002 -0500 reorganized get-*-point functions commit 19b856f9b59b81be860f3951ff77df2eecaa5ef1 Author: stevenj Date: Fri Jan 18 22:52:41 2002 -0500 make snapshot and make dist now run autoheader/autoconf in the same order commit 78fe30dc2e8c926a8cb51d378515dc3e5d15da5a Author: stevenj Date: Fri Jan 18 22:52:14 2002 -0500 make snapshot runs autoheader commit e384f0823905d401821b72b822bfec05a385b804 Author: stevenj Date: Fri Jan 18 22:43:31 2002 -0500 include install-sh, etc., in snapshot commit 29aaac547dc2c1c190540d024e9871d0c50badf1 Author: stevenj Date: Fri Jan 18 22:36:43 2002 -0500 configure.in -> configure.ac commit ebefccc414787c106787ca2cf590976d196d0897 Author: stevenj Date: Fri Jan 18 22:34:21 2002 -0500 compute-energy-integral -> compute-field-integral (generalized) (thanks to Marin for suggestion) commit ca450da70f90b4a38bc3aaf05f47e9d3d723619a Author: stevenj Date: Thu Jan 17 20:44:56 2002 -0500 fixed bug in formatting commit 7dfbe7372091be66b3de83ab2ce49c40254a3fc8 Author: stevenj Date: Thu Jan 17 20:36:52 2002 -0500 don't center exp(ikx)...it screws up vectorfield_otherhalf commit df5bc7da75fb9d49fcbd119718191cef93a1671e Author: stevenj Date: Thu Jan 17 20:05:26 2002 -0500 fixed epsilon imag. part commit 89bf0956eb76328db1bc910ddf71dadc46897942 Author: stevenj Date: Thu Jan 17 07:00:33 2002 -0500 added get-*-point functions commit e77f118efe102fa16ee6496820bc9504d164226f Author: stevenj Date: Thu Jan 17 06:50:46 2002 -0500 compute exp(ikx) phase such that the center of the cell is the origin, compute exp(ikx) phase such that the center of the cell is the origin, for more consistency with other parts of the code commit 625bb914b101468c2c261035a1fbd49bee396a46 Author: stevenj Date: Thu Jan 17 03:08:21 2002 -0500 allow user to specify resolution instead of grid size (requires new libctl) commit ec169e006a0199cc58dd2e4ef2f09f028048be09 Author: stevenj Date: Thu Jan 3 18:26:21 2002 -0500 Got rid of NaN when computing (undefined) group velocity for zero-frequency Got rid of NaN when computing (undefined) group velocity for zero-frequency states at the Gamma point; arbitrarily return zero here instead. Thanks to Dmitry N. Chigrin for reporting floating-point exceptions on Alphas. commit 00b26be89fca0072919f04e678fd4fdfa4611ffa Author: stevenj Date: Thu Jan 3 18:10:01 2002 -0500 improved run-parity docs commit c5c5e158eb617d1567016ef891693a194e939074 Author: stevenj Date: Sat Dec 15 20:28:54 2001 -0500 additions commit 801904ece1a7ebcf549d2518bb8cf7689c350ee7 Author: stevenj Date: Wed Dec 12 19:54:10 2001 -0500 use FLIBS everywhere commit 8308228136db43ec7f9275a5eed8fb0ec54ee33c Author: stevenj Date: Wed Dec 12 17:56:56 2001 -0500 added note on using a consistent f77 compiler commit 184f6b295fc37dafab2384c464596593bc12ff59 Author: stevenj Date: Sat Dec 8 21:06:17 2001 -0500 use AC_HELP_STRING, and shorten --with-hermitian-eps commit 6e166228ee4c13be499da62a14739209fc31beb2 Author: stevenj Date: Sat Dec 8 20:50:34 2001 -0500 noted new blas/lapack options commit d716042cb8a5636d4dd1c7ccf2fa3e560e49ad97 Author: stevenj Date: Sat Dec 8 20:28:02 2001 -0500 check for *.so.* as well as *.so commit c56a0256a3455b3c0d61bfef3816c343541f0b29 Author: stevenj Date: Sat Dec 8 20:10:39 2001 -0500 use new BLAS/LAPACK check macros commit 430d611c68e6ac053c0669482c15b9638c41875a Author: stevenj Date: Sat Dec 8 03:32:51 2001 -0500 slight rewording commit 97ac5ed414312711e26cb1d6e3763e0aa0162d76 Author: stevenj Date: Sat Dec 8 02:43:01 2001 -0500 updated commit 437332449800588581d9611ab56b6c9bc3fb791e Author: stevenj Date: Sat Dec 8 02:35:53 2001 -0500 documented run-yeven, etc. commit 66baa280df85d1d7f4b8b577e76e2d3bb4e09032 Author: stevenj Date: Fri Dec 7 18:45:26 2001 -0500 fixed bug in y-parity constraint for 3d. Thanks to Rumen Iliew for fixed bug in y-parity constraint for 3d. Thanks to Rumen Iliew for the bug report. commit 160319fb3b6d4be0d235852783f95a4e0ee685bb Author: stevenj Date: Tue Dec 4 19:38:27 2001 -0500 added run-yeven-zeven, etcetera commit 6f54c0a38b180255748ef84cc5adb7d6f8d14dd5 Author: stevenj Date: Tue Nov 20 20:12:55 2001 -0500 noted replacement of run-polarization by run-parity, etcetera, in MPB 1.2; thanks to Karl Koch for pointing out this omission. commit bf0b025a183ade46b96f6e2791a11628e9ca9e75 Author: stevenj Date: Tue Nov 20 19:56:07 2001 -0500 fixed missing tag commit 778b959f43bdf3fe63eaf2784e23f5d3b584c0ed Author: stevenj Date: Tue Nov 20 19:29:01 2001 -0500 updated commit 817b7a2a8e0557b5bf0a93053bee4184ba7e9ed9 Author: stevenj Date: Tue Nov 20 19:28:23 2001 -0500 bumped version commit e9d4ab507123c21d6981afb2015f4ee4b0530b53 Author: stevenj Date: Tue Nov 20 19:19:27 2001 -0500 autoconf file should not be in cvs commit d11728a14b369680ceb1976def277b71d3650e90 Author: stevenj Date: Tue Nov 20 19:14:25 2001 -0500 cleanups, allow malloc(0) commit 36f3ca24b70a8746a43d6e5ee446aacde991b4bd Author: stevenj Date: Tue Nov 20 18:40:43 2001 -0500 ugh, ugh, fixed memory overwrite due to mis-parenthesization; thanks to Karl Koch for the bug report. commit 03c1928cdfb4d07ea01dfd49bb7774f769743bf0 Author: stevenj Date: Fri Nov 16 06:43:07 2001 -0500 correction commit 01fe889848991fc7f838603609f2c317ca947a74 Author: stevenj Date: Fri Nov 16 04:01:45 2001 -0500 slight fix commit e04de82056409d7b2bd57dd2e160bfcefc76a24c Author: stevenj Date: Fri Nov 16 03:20:57 2001 -0500 added date commit a22e8c148fa30d1539099443f6e6c1086333de1b Author: stevenj Date: Fri Nov 16 03:20:30 2001 -0500 updated commit 23abce7f1b50ec579a403e23a42a22f0f56a3d04 Author: stevenj Date: Thu Nov 15 07:17:54 2001 -0500 updated commit 57668246cffdcfce0fa9f568fe2393ae71744ed9 Author: stevenj Date: Thu Nov 15 07:15:00 2001 -0500 slight correction commit 379b447ddba04f779d28c2b05d2d36d7718ea523 Author: stevenj Date: Thu Nov 15 07:13:47 2001 -0500 switched to rods, not holes, and cleaned up a bit commit 8785e97721062d4f1482d6c831226f3b97d24a5f Author: stevenj Date: Thu Nov 15 06:04:20 2001 -0500 make it easier to filter Go To lines commit f146e573a2ae9d9aaa2835603a0027e6ba0a9deb Author: stevenj Date: Thu Nov 15 05:59:04 2001 -0500 make it easier to filter Go To lines commit f62dbe1a8339be20842f1a11f75625c265a00c19 Author: stevenj Date: Thu Nov 15 05:04:16 2001 -0500 indent contents for easy filtering commit 93c57de720d8ca9988e59e8a21d002027086526c Author: stevenj Date: Wed Nov 14 23:53:36 2001 -0500 fixed bash-ism commit 82bdcd5a55a0839e7bddc1673f4e3aa0730669d8 Author: stevenj Date: Wed Nov 14 22:48:25 2001 -0500 Note the necessity of installing guile-devel RPM (grr, FAQ). commit 2d19516b2195844cb6e206ad350a7280d862b7f7 Author: stevenj Date: Tue Nov 13 18:30:54 2001 -0500 added triangular-lattice line-defect example commit fe1b1afcd0dde2ef9b21c0972e8c66a474b7aaad Author: stevenj Date: Mon Oct 22 03:12:51 2001 -0400 slightly more optimal rod-size parameter commit c5a70897e6b487d287fd22796565511ad732077c Author: stevenj Date: Thu Oct 11 04:53:06 2001 -0400 use new basis-size property commit 54b7ac457df33e7db1dee67b3afb75a817cceded Author: stevenj Date: Thu Oct 11 04:50:16 2001 -0400 copy config.guess, config.sub to 'make dist' directory commit 226a23b63fea0a42edb2cf4c82039e13cfa8774a Author: stevenj Date: Thu Oct 11 04:49:21 2001 -0400 removed non-owned files commit 653ccd902782c7a449cadcfc6ef70756a2c4d7cc Author: stevenj Date: Thu Oct 11 04:48:50 2001 -0400 bumped version commit 965f8742edc4e0745ca6322d27d30cc95a913c01 Author: stevenj Date: Thu Oct 11 04:26:58 2001 -0400 updated commit d389ad72457af66a1b8baf8e2ce5dbd0d542bfe1 Author: stevenj Date: Thu Oct 11 04:24:54 2001 -0400 noted new basis-size property in libctl commit b6becfd7ee6dc499d76e48f990c3b6d687f78c80 Author: stevenj Date: Wed Oct 10 23:11:37 2001 -0400 rotated W and K points to be consist with the picture in John's book; thanks to Robert Sheldon for the suggestion commit 28363af9aa3705b1a03bd74e4fa568d5967a09aa Author: stevenj Date: Wed Oct 10 03:45:34 2001 -0400 some updates commit c28258c02a9a519e0525a30b7b19ead32de3d919 Author: stevenj Date: Tue Oct 9 03:37:43 2001 -0400 added honeycomb lattice example commit 2d6c15cbf098f2688b3c710a97a9a80bcc6d670e Author: stevenj Date: Tue Oct 9 02:52:45 2001 -0400 updated commit 6eef49190ebcf3f7726b74c2930fe357a0fb8490 Author: stevenj Date: Tue Oct 9 01:31:49 2001 -0400 add more example files commit 314c96dea93535a8b6762f94fc3a4f8aaad9d6d2 Author: stevenj Date: Mon Oct 8 19:51:35 2001 -0400 output-copies is no longer supported commit 88d67626777ce9050053f37fe84b967a10553b36 Author: stevenj Date: Fri Oct 5 02:26:18 2001 -0400 return better scalar epsilon value commit 7e15d4ec4853bd70fe4a3fbe938e488b0315d943 Author: stevenj Date: Sun Sep 30 04:51:09 2001 -0400 slight improvement & fix commit c74a529baea3af884f774245d74583a5412dba41 Author: stevenj Date: Sun Sep 30 04:48:30 2001 -0400 spiffed up parity discussion commit 9cdf833f98fca7b4653487e70c51673e34dd8b7c Author: stevenj Date: Sun Sep 30 04:35:05 2001 -0400 another fix commit 1de09f3d422da45e009c79280ae31795c97ad0af Author: stevenj Date: Sun Sep 30 04:34:52 2001 -0400 whoops, another fix commit 3624bd52ee1aae66a68d79faa9ab1d2ae18a9189 Author: stevenj Date: Sun Sep 30 04:34:17 2001 -0400 slight fix commit fa3485491137ca4b94d804ef1822749d1199fee0 Author: stevenj Date: Sun Sep 30 02:20:54 2001 -0400 added y-parity, reorganized polarization constraints commit c5cbe75279b5452614585be6b464de5fedd3e146 Author: stevenj Date: Wed Sep 19 22:46:50 2001 -0400 updated ATLAS link commit 03e65d9efabbc7966daec54b7d8b6b7c0a48ac18 Author: stevenj Date: Wed Aug 8 05:09:20 2001 -0400 group-v computation blows away curfield; thanks to Marin for noting this commit c27e218459bf782b4efe44efd1d9de91a97e7135 Author: stevenj Date: Tue Jul 24 03:08:05 2001 -0400 use units for D that are consistent with H commit 75d6fc838bd5774a4662abfec80b7c2772a734d7 Author: stevenj Date: Mon Jul 23 20:54:53 2001 -0400 added full epsilon tensor output (some problems still for hermitian epsilon with inversion symmetry) commit 313ff6519f9dd232a8fcfc55cf3d4c723faa68d9 Author: stevenj Date: Tue Jul 10 18:06:55 2001 -0400 make sure guile is in PATH commit 18993f2e571b6178bad6379a9617ba74dc415f14 Author: stevenj Date: Thu Jul 5 04:54:29 2001 -0400 updated commit ec4113467d9b0a40521741ef7ac3f92d35003bb1 Author: stevenj Date: Thu Jul 5 04:46:57 2001 -0400 fixed MPI compilation, whoops commit 5c68c9078d97109b2c8346d3f0ac30710adaacc4 Author: stevenj Date: Thu Jul 5 02:20:41 2001 -0400 be sure to call autoheader for 'make dist' commit 4844252e3318367b3f743acb8311e5008c2434df Author: stevenj Date: Thu Jul 5 02:15:14 2001 -0400 updated commit 6991311cacb2a3597312cad32babbf5ebb83457c Author: stevenj Date: Thu Jul 5 02:08:57 2001 -0400 fixed for new config.h commit 494d3b033fc4a039e37862acb8bc00900d6cbe80 Author: stevenj Date: Thu Jul 5 01:53:54 2001 -0400 switched to autoconf 2.50 commit 91239aa829ae4b8e71572182916cb09c302f4c55 Author: stevenj Date: Thu Jul 5 01:12:57 2001 -0400 lowered default tolerance to 1e-7 commit b68f2089c96becbe0fb4f099a874692732b621f0 Author: stevenj Date: Thu Jul 5 01:11:24 2001 -0400 updated commit 5bfad7124ac199351c53fec3e43c18760224c463 Author: stevenj Date: Thu Jul 5 00:51:05 2001 -0400 fixed documentation cross-refs commit 7b9d4c2ccef29bcb72ceb9c256b9b23e8ee94adc Author: stevenj Date: Thu Jul 5 00:48:47 2001 -0400 documented, fixed retrieve-gap function commit 862a5bb3787f1bf48829382b91e53660c83dc1f3 Author: stevenj Date: Thu Jul 5 00:48:34 2001 -0400 updated commit 66eaffb40482ee44535bd81cb4e6e1aceefd5729 Author: stevenj Date: Thu Jul 5 00:46:10 2001 -0400 bumped version to 1.1.1 commit 4b138ade411bd04209259d5031f5cc45570f3203 Author: stevenj Date: Thu Jul 5 00:07:56 2001 -0400 generalized commit 057a86851d991ae86d97a89a12f3ebbc8b7201af Author: stevenj Date: Tue Jun 26 22:40:48 2001 -0400 updated commit 5ea3647389ee35572d4d7e9214c5016c28c658f6 Author: stevenj Date: Tue Jun 26 17:39:50 2001 -0400 yikes, fixed bug in H output for cases lacking inversion symmetry commit 8eb5e5a1959426a7cb35f84c60ffd8f18ea9c16f Author: stevenj Date: Thu Jun 21 17:59:49 2001 -0400 detect MPI compiler for AIX...this test needs to be split into a separate macro, really commit f4a07053d7f8d4bd7e86f5be533f0c5551f5250e Author: stevenj Date: Tue Jun 12 23:39:00 2001 -0400 Laid some groundwork for negative epsilon support, but need a new Laid some groundwork for negative epsilon support, but need a new eigensolver algorithm before it can really work. More importantly, fixed bug in mpbi for 1d transforms (arrays were not written properly, and worse: array bounds were violated, causing random results). commit 26cfac16db3a3ac01a9a0b532c03e208083f9310 Author: stevenj Date: Sun Jun 3 15:27:32 2001 -0400 added retrieve-gap function commit f97751a8879634a943ae0e61e179d815825ecac2 Author: stevenj Date: Wed May 9 02:28:58 2001 -0400 output malloc count when verbose commit cd7792671bc3c82f11486721b990cbddca3f97d4 Author: stevenj Date: Wed May 9 02:28:29 2001 -0400 add debug_output_malloc_count commit 527b84876b30cf380fb586bbd394a3b9d2e54c06 Author: stevenj Date: Sun May 6 19:24:19 2001 -0400 updated commit cd8846e16e08d4d4734c815d79f447cf86733487 Author: stevenj Date: Sun May 6 18:35:31 2001 -0400 K is C_{3v}, not C_{6v}. commit 5af205de07160b46be54740c3047f53d5311045a Author: stevenj Date: Mon Apr 30 15:07:07 2001 -0400 updated & bumped version commit 043e805c76870455ac6102636bfc571af52d203b Author: stevenj Date: Mon Apr 30 14:56:43 2001 -0400 Fixed bug in field output for kz != 0. Thanks to Jesper Riishede for the Fixed bug in field output for kz != 0. Thanks to Jesper Riishede for the bug report. commit 733652daa740d26e0ff475c9ff492d316ddd9f59 Author: stevenj Date: Sun Apr 29 12:53:23 2001 -0400 note limitations of fix-*field-phase commit 1f0bbc601e6b53edadc842707a6c2d21844a88da Author: stevenj Date: Thu Apr 26 19:58:54 2001 -0400 updated LAM URL commit a2c578ebb848a1b53be0d798f18cceb93e9ab4c2 Author: stevenj Date: Fri Apr 20 15:35:16 2001 -0400 Use Use #! /bin/bash instead of #!/bin/bash for portability on some systems. commit f51c05fe7bd47500dcb4c2edd6e5a1976a597df8 Author: stevenj Date: Fri Apr 20 05:14:28 2001 -0400 compute_energy_integral should also pass position to integrand commit 02c4e853fe444f0b2b0bd46121c09d697a6e7ddc Author: stevenj Date: Sat Apr 14 21:52:27 2001 -0400 Whoops, add first job (0th k-point chunk) to list of subprocesses, so that Whoops, add first job (0th k-point chunk) to list of subprocesses, so that it gets killed properly if we kill the script. commit 97fa4dabb21b223c9d904348e9ed1a5619d3196e Author: stevenj Date: Wed Apr 11 02:42:01 2001 -0400 Added compute-energy-integral function, suggested by Marin Soljacic. commit 5d0403139dfe96148121d501fa3ecb90fbe7d6d6 Author: stevenj Date: Tue Apr 3 05:23:15 2001 -0400 acknowledged Bob Meade commit 7c4286d48f72271229aa96a42f3e09d995581713 Author: stevenj Date: Wed Mar 7 20:30:17 2001 -0500 minor cleanup commit 0e4a1b857e86e19cb73fd48aed89436676b05e7c Author: stevenj Date: Tue Mar 6 23:12:37 2001 -0500 magnetic material -> gyrotropic (magneto-optic) material commit 1ac1cd54e6db6d013c92da69b1a1e71e103a27e8 Author: stevenj Date: Sun Mar 4 19:00:57 2001 -0500 display-eigensolver-stats outputs mean time per iteration commit 8b133755e6b8dfd1680812526910f28efc11d926 Author: stevenj Date: Sun Mar 4 17:12:44 2001 -0500 photonic-bands -> MPB commit 06da0fbfb918978baa615a52e566b1a6c32ae039 Author: stevenj Date: Sun Mar 4 17:09:59 2001 -0500 link to MPICH and LAM from MPI section commit f7290a4ede43560d76a5271f721c7c28783955d3 Author: stevenj Date: Sun Mar 4 16:54:33 2001 -0500 check to make sure -n argument is > 0 (thanks to Niclas Carlsson for a check to make sure -n argument is > 0 (thanks to Niclas Carlsson for a bug report). commit a19ede6e09c6e77de77da3fbeea496d1f3a85450 Author: stevenj Date: Fri Mar 2 03:05:43 2001 -0500 linked to units section commit 61b144f10f3ce4777a6dab7904db4d1fdd5d7ae1 Author: stevenj Date: Fri Mar 2 03:02:34 2001 -0500 ./mpb -> mpb (why did I have it this way?) commit c06cbc235779d0496a40da4c8ee54a21fc75633f Author: stevenj Date: Sat Feb 24 18:12:51 2001 -0500 fix hyphenation commit b0f928f77770ce524ba903c8843a5e38eb3a8e12 Author: stevenj Date: Fri Feb 23 19:51:04 2001 -0500 parallel, not just parallizable commit 6543b847b13dde2637b46e89901cbf9bf01fcdd0 Author: stevenj Date: Fri Feb 23 19:13:17 2001 -0500 bumped version for release commit 7c2f7a909ed7156f4c0c1a1ecd2972cfbde5c7b7 Author: stevenj Date: Fri Feb 23 05:14:24 2001 -0500 H5Pset_mpi is now called H5Pset_fapl_mpio in HDF5 1.4.0 commit f18a6e25f1b0319edd1be7876b935f431e390b63 Author: stevenj Date: Fri Feb 23 02:32:38 2001 -0500 more warnings or errors if important things are not found commit d26494c1c120c2fa3f73aa29961096de1a106a34 Author: stevenj Date: Thu Feb 22 20:06:04 2001 -0500 pick deterministic phase for eigenvectors commit 259f6aeb703f00144d19cd1f61a53f69384a4742 Author: stevenj Date: Thu Feb 22 17:07:32 2001 -0500 removed single quotes that confuse emacs coloring commit fceba1b73526818ee63c29c2f9675b7f5a2c2669 Author: stevenj Date: Thu Feb 22 17:06:39 2001 -0500 use nicer section separator commit 25f100af870ef465c6d9f8a1d5e7612dab1219de Author: stevenj Date: Thu Feb 22 02:24:52 2001 -0500 updated commit c7791a18711e16fe86b5437752ae32efa9d665f2 Author: stevenj Date: Thu Feb 22 01:57:44 2001 -0500 try to find a Bourne shell with job control commit 73f1b6c1bafbb8db23b0452d29ad2fb747010906 Author: stevenj Date: Tue Feb 20 01:48:34 2001 -0500 whoops...variable assignments in Makefiles don't carry over to the next whoops...variable assignments in Makefiles don't carry over to the next line (I guess each line is executed in its own subshell). commit c0e1e49b5fdee264817252cac1a75b15dc5f5848 Author: stevenj Date: Mon Feb 19 22:08:01 2001 -0500 punctuation alteration commit 865aad8475e2e275922f81edccf28dadf73cb1c6 Author: stevenj Date: Mon Feb 19 22:06:54 2001 -0500 slight rewording commit b22149c191123f763d1ed20d4a7690afa39e41ea Author: stevenj Date: Mon Feb 19 22:04:38 2001 -0500 noted that the real part is sometimes zero commit d281afe34042a4682fd74dd6c2aaa926b42ca98e Author: stevenj Date: Mon Feb 19 21:58:54 2001 -0500 noted units for resolution in mpb-data commit 18828c6ca891de49ef69880aae08249119049a88 Author: stevenj Date: Mon Feb 19 21:56:51 2001 -0500 use -S 3 instead of -X 3 -Y 3 commit ec3ab20ecff41db9834cdae604628104b393e2f4 Author: stevenj Date: Mon Feb 19 21:46:59 2001 -0500 updated mode pictures (since mpb-data now centers its output at the origin) commit 6ec98b274fcc09e54cde09ba2bd97a8981601d74 Author: stevenj Date: Mon Feb 19 21:31:59 2001 -0500 updated to latest version commit e517680d1166ab12e683d6568d8927fb5977b8c5 Author: stevenj Date: Mon Feb 19 21:15:41 2001 -0500 updated commit 545d02d597b6d52c9446616ee212108d8eb07a5b Author: stevenj Date: Mon Feb 19 19:56:13 2001 -0500 a couple compilation fixes, and noted use of define-param in the manual commit 2ecffa968e781ac56d15a7f65d9b86640cdbfd15 Author: stevenj Date: Mon Feb 19 13:53:10 2001 -0500 whoops, got rid of premature exit commit dc1194a1fdd06a9630a9c36fd9d9a2f6e6aa5f4e Author: stevenj Date: Mon Feb 19 13:49:32 2001 -0500 improved accuracy in 1d tests...but there still seem to be occasional improved accuracy in 1d tests...but there still seem to be occasional discrepancies. What is going on? commit 4e0a894633216a5ae3e862813537b0ca9752200e Author: stevenj Date: Mon Feb 19 12:17:24 2001 -0500 clarification commit 2b5fe819e47bdfb66c73bc7f3680eb3d97bd47d5 Author: stevenj Date: Mon Feb 19 11:13:09 2001 -0500 updated commit ec9dd59dbe85be492bf10c6326adff9bf217f2b1 Author: stevenj Date: Mon Feb 19 02:52:01 2001 -0500 compound adjectives are hyphenated, but *not* adverbs modifying adjectives commit f0d7a2280b76ab201e2d1833219da1ad494221cd Author: stevenj Date: Mon Feb 19 02:37:17 2001 -0500 parallel doc cleanups commit 2ca65ffe372c878ba5483a2e9d2e1729707f474f Author: stevenj Date: Mon Feb 19 02:29:07 2001 -0500 added mpb-split for simpler parallelization without MPI commit f68671c92d9a3f9c0328950137cfc2c8d046860b Author: stevenj Date: Sun Feb 18 02:11:53 2001 -0500 fixed autoconf URL commit c657d245fb11b8ea442941960eba0491c6ce321a Author: stevenj Date: Sun Feb 18 00:04:35 2001 -0500 whoops, non-constant array initializers are not allowed commit 524eb4fbef249bfafc234e7b3b267fdbd8e6b8cf Author: stevenj Date: Sat Feb 17 19:17:05 2001 -0500 mention parallel HDF5 commit bbc6490e97badde103cd8e47c4799542c96119a3 Author: stevenj Date: Sat Feb 17 18:52:50 2001 -0500 fixed typo commit 2fa5f2de32bb5ddf9d26b3d47420374ba3672614 Author: stevenj Date: Sat Feb 17 18:51:33 2001 -0500 noted mpbi-mpi in manual commit feb1fc8e73ae11ed541c98de70b9486e359e8aa7 Author: stevenj Date: Sat Feb 17 18:43:28 2001 -0500 fixed counting statistics for mpbi-mpi commit 34b142e3e663bbbd62bda7494c69066de8f0552b Author: stevenj Date: Sat Feb 17 18:27:51 2001 -0500 fixed field output for 2d mpbi-mpi commit 0550f34e5b4f54fbc170ec44571fe18f0748b34e Author: stevenj Date: Sat Feb 17 18:08:47 2001 -0500 fixed copyright year commit 0efff39175220ae0f9aa6606beaba06a9af7db13 Author: stevenj Date: Sat Feb 17 17:18:28 2001 -0500 don't call H5Dwrite at all for empty dataspaces (e.g. in leftover don't call H5Dwrite at all for empty dataspaces (e.g. in leftover processes under MPI) commit 7b48aa342f240e66d4962eefed5d9660b4e47391 Author: stevenj Date: Sat Feb 17 17:14:52 2001 -0500 bug fixed for mpbi-mpi field output commit b927af45530021a3313e8e8453012e05a99c70e8 Author: stevenj Date: Sat Feb 17 17:13:59 2001 -0500 There sees to be some funny rounding problem on the Origin (at least) There sees to be some funny rounding problem on the Origin (at least) that causes it to get confused about whether x=0 and/or y=0 is inside the eps block. commit 4b053df653b79995a75df51ceeb36b6dbe0383de Author: stevenj Date: Sat Feb 17 15:58:14 2001 -0500 fixed broken tag commit 5ac558f11c12f0e2b879720c5b82a486230f1af3 Author: stevenj Date: Sat Feb 17 14:43:30 2001 -0500 undid erroneous cleanups (although they wouldn't have technically undid erroneous cleanups (although they wouldn't have technically caused problems) commit 60460ec58884fc1849633dd3689573e4f17ae4c5 Author: stevenj Date: Sat Feb 17 14:32:32 2001 -0500 updated commit 17c3169a3eea91af43439ddca48a2f677e163f30 Author: stevenj Date: Sat Feb 17 04:51:39 2001 -0500 whoops, fixed typo commit e16bee7fa4668faa5e5c9e7ffd57e7370f981e51 Author: stevenj Date: Sat Feb 17 04:13:59 2001 -0500 slight cleanup and mpi compilation fix commit 458ae23b5c90226d3aa327bb645866d8e1596889 Author: stevenj Date: Sat Feb 17 04:08:19 2001 -0500 Laid much of the groundwork for mpbi-mpi (still untested, though). Laid much of the groundwork for mpbi-mpi (still untested, though). Rewritten otherhalf routine and field output to support funky rfftwnd_mpi output formats (especially the 2d case). Fixed bug in mpb-mpi when x and y grid sizes are not equal. commit 8ca35acb4b50bf6934595c94cd82226670b1f817 Author: stevenj Date: Sat Feb 17 03:37:29 2001 -0500 fixed typo commit df99045bae1041a3bcb3e875023721665128da2d Author: stevenj Date: Fri Feb 16 23:12:05 2001 -0500 minor rewordings commit 894fd6701d059ea226c8e2c9c355277cf3bb0cb7 Author: stevenj Date: Fri Feb 16 23:08:32 2001 -0500 updated commit f0a78766e7b45aa5d9aabefc64970918d53ac4fc Author: stevenj Date: Fri Feb 16 23:05:04 2001 -0500 Fixed a problem with MODF_POSITIVE that caused mpb-data to crash on an Alpha; Fixed a problem with MODF_POSITIVE that caused mpb-data to crash on an Alpha; thanks to Dominique Caron for the bug report. commit a4ae1a3e5074e64c64ee30d9a6540398df0c2833 Author: stevenj Date: Wed Feb 14 20:00:55 2001 -0500 note that MPB exits with an error if run-te/tm are used nonsensically, note that MPB exits with an error if run-te/tm are used nonsensically, or if epsilon is not positive-definite. commit 70f31b63cd6115494d01a01b9aa642ed966f6e89 Author: stevenj Date: Wed Feb 14 19:49:02 2001 -0500 fixed hyphenation commit 385af6f225958a92f9c35bd41271b757c2deee5c Author: stevenj Date: Wed Feb 14 19:31:48 2001 -0500 bumped version commit f484e1b3bbadbcab8352321251607ffae42f2c41 Author: stevenj Date: Wed Feb 14 19:16:41 2001 -0500 Rewrote field output for inversion-symmetry case. We now write the field Rewrote field output for inversion-symmetry case. We now write the field to the file in a few chunks, rather than trying to expand the half-complex rfftw output to the full array. This paves the way for a parallel mpbi. As a side effect, we also circumvent a bug in the old makefull routines that caused artifacts to appear in the output for 3d cells (reported by Michelle Povinelli). commit a53e51a9cc4c95c48855d22ba5221a81c88d3401 Author: stevenj Date: Sun Feb 11 20:50:49 2001 -0500 Bug fix in combine-band-functions, etcetera, for when a thunk is encountered. Bug fix in combine-band-functions, etcetera, for when a thunk is encountered. Thanks to Michelle Povinelli for the bug report. commit 8c87b5d3ca2d05dfcb092331d990ce5305a391ef Author: stevenj Date: Fri Feb 9 04:02:59 2001 -0500 generalized fieldio function in preparation for rewritten mpbi output... commit 4bd058dfa865882fc37a0a2f714c97ccfd595bdc Author: stevenj Date: Fri Feb 9 02:50:45 2001 -0500 eliminated output-copies in favor of mpb-data commit ccc2f2d1aef75af837abecb9c1b0e587aa2f2827 Author: stevenj Date: Thu Feb 8 22:29:35 2001 -0500 added geometry tree debugging code commit 67b729dd9846ab3acdec6db676b240d1a33106a0 Author: stevenj Date: Thu Feb 8 05:51:41 2001 -0500 give (more) thanks to Clarendon commit a26282cbcbeb74131cf505e7405268f89f570caa Author: stevenj Date: Thu Feb 8 05:39:39 2001 -0500 fixed problems when an MPI process has no portion of the eigenmodes (which can happen for inconvenient # processes)...matrixio is still not quite right, though commit 1d2bc845dc65bdc098de4c35fdaf5a525561abc9 Author: stevenj Date: Thu Feb 8 04:40:12 2001 -0500 don't die if passed NULL arrays for zero sizes commit e77b9b8d3f9c4242aef20840fb39b6072544dd67 Author: stevenj Date: Thu Feb 8 04:37:31 2001 -0500 added get/set kpoint-index functions commit ab1c2e567e2b8459eba83a62462bc1e70804ce00 Author: stevenj Date: Thu Feb 8 04:06:47 2001 -0500 updated commit d2500d75e97eee8409ced73c79872dfc3b943588 Author: stevenj Date: Thu Feb 8 03:58:37 2001 -0500 documented mpb-mpi commit 616a10702287fbfd1aba729ddde6cf67eacfd593 Author: stevenj Date: Thu Feb 8 01:46:44 2001 -0500 check-tolerance should be a param commit e38d00c3fa257eef9fde1e9c6e9aa5dc0d0137b0 Author: stevenj Date: Thu Feb 8 01:20:35 2001 -0500 Fixed bug in zero-k constraint for parallel systems. commit 556e4774e195deedc172df73d975118f28d4d2ed Author: stevenj Date: Wed Feb 7 20:00:41 2001 -0500 thanks to Clarendon commit fdd01c5bca7e2400b27fcc6201db0d3099123ecf Author: stevenj Date: Wed Feb 7 19:26:03 2001 -0500 added mpb-data -T option commit 6b8238ace4e849e521bcca2ddcaa6e24ea39abf8 Author: stevenj Date: Wed Feb 7 19:11:18 2001 -0500 don't build/install mpb-data when linking to MPI commit 66c78cded4f68034cfd1ff1848abaa1ba51ccc38 Author: stevenj Date: Wed Feb 7 19:01:29 2001 -0500 expose more MPI info to Guile, and don't do 1d tests in check.ctl under MPI (where they are not supported) commit ae037ca49264d334fe29b78d5f00ef46a939dbea Author: stevenj Date: Wed Feb 7 18:51:31 2001 -0500 yikes, Allreduce requires sendbuf != recvbuf (although this is not clear from the documentation) commit fb4d1ecfecbda1f130abd57a8d3bb7aa03b594ea Author: stevenj Date: Wed Feb 7 04:15:57 2001 -0500 cleanups, fixed calculation of eps_inv_mean for MPI commit 9a409b1d2738e6eafdef8796a834f7bc92a47ddd Author: stevenj Date: Wed Feb 7 04:00:58 2001 -0500 fixed indenting commit 759c22afc2bc292faa338bbee15df67705513736 Author: stevenj Date: Wed Feb 7 03:49:15 2001 -0500 updates commit 1cb790998bfc6d2eabd69a81ec22254b91c9730d Author: stevenj Date: Wed Feb 7 01:21:55 2001 -0500 put check target at the end so that 'make' does 'make all' commit d524ad97e8becfcc49ac41f10a477fe4bd5d2b96 Author: stevenj Date: Wed Feb 7 01:07:16 2001 -0500 fprintf -> mpi_one_fprintf commit c85983a1a705baa6ff0d16c2fa7124ee3ac1c52e Author: stevenj Date: Wed Feb 7 00:33:01 2001 -0500 whoops, fixed stride/dist check to coincide with what fftwnd_mpi really supports commit 66c6aa08e8852c664318a3861507c7f394278b3e Author: stevenj Date: Wed Feb 7 00:23:45 2001 -0500 define HAVE_FFTW to something commit 50cc4cd3e2ee48f6ddd201ebcf6d7f78380c0335 Author: stevenj Date: Wed Feb 7 00:18:58 2001 -0500 fixed compilation whoopses under MPI commit 7b55a00c3244f565ae6a2a2e041ba34c888a9ecd Author: stevenj Date: Wed Feb 7 00:10:39 2001 -0500 fix commit 56e81d05174a6bcbb4c408d4deebecc00187da2e Author: stevenj Date: Wed Feb 7 00:09:19 2001 -0500 updated commit 36c8688812b743107137c336dfd029e18c02e819 Author: stevenj Date: Tue Feb 6 23:52:25 2001 -0500 workaround for older versions of Guile where we can't get the number of arguments to a function (apparently) commit 3ee7fdf95e64259fd73d91ca817c294281899da2 Author: stevenj Date: Tue Feb 6 23:35:40 2001 -0500 fixed gen-ctl-io check, removed AC_PROG_CC_STDC ifdef...there's something not working about ifdef that I don't understand commit 2749ade64622046826451604f5995698d9ec8077 Author: stevenj Date: Tue Feb 6 23:13:53 2001 -0500 call AC_PROG_CC_STDC if defined, in part so that autoconf 2.5 doesn't complain commit 069ec044eed1f169751d1a5e8bba7740b979e3d2 Author: stevenj Date: Tue Feb 6 22:11:01 2001 -0500 added MPI checks commit 266fd994a25c0c92f9fac755f4f827a0497e5d41 Author: stevenj Date: Tue Feb 6 20:27:32 2001 -0500 clarification commit 945594c863bf293902a31852a739b847516e1c77 Author: stevenj Date: Tue Feb 6 20:25:05 2001 -0500 fixed misnamed function call commit 1f5285351652f4ca3e1c27529b664c49f23fdec2 Author: stevenj Date: Tue Feb 6 20:23:34 2001 -0500 support HDF5 file i/o without H5Pset_mpi commit 706de1d5bc0aaa8ad0bbd5a60eb10b20b21bc6b1 Author: stevenj Date: Mon Feb 5 06:12:30 2001 -0500 added critical section utility, intended for mediating output file access commit 1eedbb272774847e8886f72ef9efb02256a5568c Author: stevenj Date: Sun Feb 4 05:58:44 2001 -0500 turn off printing unless we are the master process commit 344363670f8459c2d5ac3adf637b2c717f1a4eae Author: stevenj Date: Sun Feb 4 05:49:12 2001 -0500 display-many -> print commit e84bee4b9618ce387ec3d378cba4e28d02101745 Author: stevenj Date: Sun Feb 4 05:43:31 2001 -0500 make main() in new libctl call our hooks commit 72ec08722f559e60e5b33ec98bf0d3b657ecba1f Author: stevenj Date: Sun Feb 4 04:44:05 2001 -0500 many cleanups in preparation for MPI commit e1fecd44176c6161366a96e35b4e3353c6e62671 Author: stevenj Date: Sun Feb 4 00:45:56 2001 -0500 give error if k-point is incompatible with the polarization commit 39a9aba6ffbbca7567beccbf42bae52d27bdb12a Author: stevenj Date: Sun Feb 4 00:15:36 2001 -0500 fixed blastest 'make check' for complex scalars commit da86e49595f2ee48f72ee2fc6083ef49fa64d2e1 Author: stevenj Date: Sat Feb 3 23:57:56 2001 -0500 checks to see if dielectric tensor is okay; return error if TE/TM is specified but impossible commit fcae2b4bf0a63f8522227ed6b3fbea6ecdedb8c3 Author: stevenj Date: Sat Feb 3 00:55:51 2001 -0500 fixed typo commit 7af6a7594dcb34b29d760dc58580928101b49349 Author: stevenj Date: Tue Jan 30 07:41:42 2001 -0500 use vendor cc, too, so that Fortran and C are in sync (there may be use vendor cc, too, so that Fortran and C are in sync (there may be linking problems, otherwise). commit d42e1e587a5da99ecd3cdf4d751115463fc7a861 Author: stevenj Date: Tue Jan 30 06:07:28 2001 -0500 noted MPB paper commit 0ab01ba911d5a00134a1ee9f83c3d7c79a732c4f Author: stevenj Date: Sat Jan 27 01:24:22 2001 -0500 fixed compute_energy_in_object_list for non-orthogonal lattices commit 93a0aa72064eef12de60baa7498915d317a27081 Author: stevenj Date: Fri Jan 26 02:04:46 2001 -0500 filename-prefix is once again a define-param variable commit 34ce28a6f575183f13ef42e2d540861feb9f3336 Author: stevenj Date: Wed Jan 24 06:45:47 2001 -0500 clarified the purpose of "nothing" commit c32de9d2a3ca39576b031e7dbce1a9c87ec429b9 Author: stevenj Date: Wed Jan 24 06:23:59 2001 -0500 in compute-energy-in-objects, let 'nothing' material punch a hole commit 2ced0ddc3d9a4c31b84e1dc2dc5d540264cc54df Author: stevenj Date: Tue Jan 23 22:58:14 2001 -0500 added 'nothing' material commit bbf16a4e4ebc9123075e2a87cc5b206d36b2ada0 Author: stevenj Date: Tue Jan 23 17:19:32 2001 -0500 clarified simultaneous installation of mpb and mpbi commit ace5444632c1645308cd86b58ad617273731d29e Author: stevenj Date: Sun Jan 21 07:07:53 2001 -0500 collect error statistics commit 29010e243c0c1c74cadc88df4f1e261b54e0fa41 Author: stevenj Date: Sun Jan 21 06:58:22 2001 -0500 Fix a bug (Bragg-sine not resetting default-material). Also raise Fix a bug (Bragg-sine not resetting default-material). Also raise tolerance slightly. commit b7789dd254e7790c7e3cde176af7f5e721b9936c Author: stevenj Date: Sun Jan 21 06:50:53 2001 -0500 print friendly message when (if?) make check passes commit da31a443a327022cb3921a68ca283991f6d63f3e Author: stevenj Date: Sun Jan 21 06:45:48 2001 -0500 added sinusoidal Bragg to make check commit d0910d307b93be3619a084b6f7995d6e9d3d92b8 Author: stevenj Date: Sun Jan 21 06:19:11 2001 -0500 warn user about run-te and run-tm with anisotropic dielectrics commit 389154f7eb8aee51d363035775fcb498b90baedd Author: stevenj Date: Sun Jan 21 06:01:02 2001 -0500 give credit commit 80589cfbe639d39d075342ddf162bd4a0b71131b Author: stevenj Date: Sun Jan 21 05:58:59 2001 -0500 added material-function type commit 4007802f513141199dfe9bc70eafbe87945fb6f3 Author: stevenj Date: Sun Jan 21 05:08:35 2001 -0500 don't check for ctl_get_list (not there anymore) commit 18f583fd6a54a40dbd36cce99f16ac95df550c42 Author: stevenj Date: Sun Jan 21 02:12:36 2001 -0500 let's not capitalize 'Hermitian' commit 548ffcca281f52947c84a4a33b5e76e1de8c2025 Author: stevenj Date: Sun Jan 21 01:40:55 2001 -0500 whoops, fixed $ substitution commit db84732ab863eca6913bc917df96e1251edb6787 Author: stevenj Date: Sun Jan 21 01:39:16 2001 -0500 changed subdir order in make check commit 11a66ca0d9f8562586158c9290c4bcf300958c50 Author: stevenj Date: Sun Jan 21 01:37:42 2001 -0500 added 'make check' commit 7588c38ea032f579e22722a1519a61186658557f Author: stevenj Date: Sun Jan 21 01:34:13 2001 -0500 fix -E commit e2976304bbe7af27d02b76353e48d76ccbfd6433 Author: stevenj Date: Sun Jan 21 01:33:16 2001 -0500 use epsilon with inversion symmetry, so it works with mpbi commit 3b858746200f722df3a556012146ad231254ba70 Author: stevenj Date: Sun Jan 21 01:28:56 2001 -0500 added sample output commit 010c8d2bdde45117b60c0637e0968c6a4644c5b6 Author: stevenj Date: Sun Jan 21 01:28:25 2001 -0500 allow option to fail if error is too large commit d73bd9b0500670075eb395bf24ce903cc3266fce Author: stevenj Date: Sun Jan 21 00:44:25 2001 -0500 Earlier, we flipped the sign of the G vector in order to have a Earlier, we flipped the sign of the G vector in order to have a consistent sign of k for mpbi and mpbi--it is especially important to be careful about this when you have a complex-Hermitian dielectric tensor that breaks (k,-k) time-reversal symmetry. However, this made our planewave basis slightly different from before. It used to be that we had 1 more positive-G planewave than negative-G (for even grid sizes), but the above change reverses this situation. It doesn't matter in an absolute sense, since the planewave cutoff is still the same, but the difference was an annoyance--it caused check.ctl to fail because of microscopic changes in the results, and also made us inconsistent with the MPB paper. This change fixes that, restoring the +G/-G planewave balance to what it was before (although the basis elements are stored in a different order, with the -G waves first). commit 83e3082d68ef878a7fa199ab9ff7df1847c5f090 Author: stevenj Date: Sun Jan 21 00:22:07 2001 -0500 fixed G sign convention to be consistent for mpbi and mpb commit 3cacb8949ff42509990ff1c172d796ab5a3e6542 Author: stevenj Date: Sat Jan 20 23:49:51 2001 -0500 spelling correction commit 934426ae285d7bf5534667d3c81baf6fc7f01429 Author: stevenj Date: Sat Jan 20 23:27:54 2001 -0500 link to barnesandnoble.com instead of Amazon to be GNU-ly correct commit 38852febc89192cb9a51b421fe6fdb136d84a7a6 Author: stevenj Date: Sat Jan 20 23:13:19 2001 -0500 added link commit 59d3cac09cdc1335b1386b2b10d1d1bc92d98169 Author: stevenj Date: Sat Jan 20 23:11:28 2001 -0500 documented complex-Hermitian epsilon commit 373c31643eb7547cdaa891a2ed7b16722471bf9f Author: stevenj Date: Sat Jan 20 22:29:21 2001 -0500 slight change commit 48cf36ea8c5ec3e710ef3c8cb074f563610f2ed3 Author: stevenj Date: Sat Jan 20 22:24:42 2001 -0500 added --with-hermitian-epsilon commit 93a2b8c5e41c329657e4a7e45a123a9894f96c5b Author: stevenj Date: Thu Jan 11 19:08:31 2001 -0500 Modified band-range data functions so that they are tail recursive, Modified band-range data functions so that they are tail recursive, lest stack overflow crashes occur when large numbers of bands (e.g. 600) are computed. Thanks to Mihai Ibanescu for the bug report. commit c43dfe8890c0593151a8bc5daca2996280ca20d5 Author: stevenj Date: Wed Jan 10 16:32:36 2001 -0500 use MIN, MAX, and ABS in case some header file defines these macros use MIN, MAX, and ABS in case some header file defines these macros too (like AIX...grrr). Thanks to Angelo R. Rossi for the bug report. commit 6f075c817a36e7649621cd84aa9e30aec35da817 Author: stevenj Date: Sun Jan 7 20:16:59 2001 -0500 clarification commit 4db67dd623b191bdfbbbec211a578cf1d60ad9fd Author: stevenj Date: Sun Jan 7 20:12:25 2001 -0500 slight clarification commit 590dc78ca639aa2d870dedd592884a1ed39ca72b Author: stevenj Date: Sun Jan 7 18:54:19 2001 -0500 slight formatting fix commit ad1e78cedd31cc1841d347f260632c5a0f42c9ce Author: stevenj Date: Sun Jan 7 17:50:00 2001 -0500 updated commit e578e81869ef78e232b4b33b349696d36764677f Author: stevenj Date: Sun Jan 7 17:47:20 2001 -0500 bumped version number, prepare for release commit 7c9f5481459da603b1875e654e103143fdd29651 Author: stevenj Date: Sat Jan 6 20:34:47 2001 -0500 clarification commit 1dcf0643029b4a72335140b900d9d1be88f7eb22 Author: stevenj Date: Sat Jan 6 20:20:58 2001 -0500 updated fcc units note commit fc265bed1fcf7f4a1c2de8e1bfbfb5a28939f76e Author: stevenj Date: Sat Jan 6 20:10:08 2001 -0500 use standard units for fcc (diamond) commit 6c6e537ef9e9d145a4003f7fc7b20089070f5b81 Author: stevenj Date: Sat Jan 6 19:31:34 2001 -0500 bug fix in filename-prefix use (fixes bug introduced by previous change) commit 8eceaa7539cf4ac3763f8a9264da26124d8f62e8 Author: stevenj Date: Sat Jan 6 19:16:40 2001 -0500 expanded table of contents commit 39601ad770d8b6164a03c35c3a8d7af7126aca8b Author: stevenj Date: Sat Jan 6 08:28:20 2001 -0500 clarification of efence commit cab62043527d4a1fd0a4475536a645dd6ae6e287 Author: stevenj Date: Sat Jan 6 08:24:44 2001 -0500 fixes commit 6c846a6a4379a701f3cd28a53ff12841167653c8 Author: stevenj Date: Sat Jan 6 08:24:05 2001 -0500 fixed missing link commit 8e695252760fdaa555b56c18ef2875de9f4da5a8 Author: stevenj Date: Sat Jan 6 08:20:04 2001 -0500 slight change commit e7ee318b8caae8102ee3d984fbc65a794766ff97 Author: stevenj Date: Sat Jan 6 08:18:44 2001 -0500 emphasize HDF5 commit b0d170a7eda7e79c42a1204f6a8a64ec1c1edc36 Author: stevenj Date: Sat Jan 6 08:18:07 2001 -0500 noted more clearly that MPI is not yet used commit bbf79cf620ba17639a1e6181f297bfcb15d47626 Author: stevenj Date: Sat Jan 6 08:16:55 2001 -0500 fixed ref commit 66d7fc08ee12064d1500b4d6d77da17ffd900625 Author: stevenj Date: Sat Jan 6 08:14:59 2001 -0500 recommend ATLAS commit e2081db11baace3878c4ea9a116d7f4359ada7a4 Author: stevenj Date: Sat Jan 6 08:11:37 2001 -0500 moved Bourne shell note up front. commit 715945862eb172348a55c6b8680c72cbed9831c6 Author: stevenj Date: Sat Jan 6 08:08:49 2001 -0500 grammar fix(?) commit eb10bef194e5ba078cee677e8217d0b9a32ae7b8 Author: stevenj Date: Sat Jan 6 08:07:08 2001 -0500 notes on binary packages for Linux commit f14ebb7d023b51ffe271b8b91d8e1514b9b7c3c6 Author: stevenj Date: Sat Jan 6 07:53:06 2001 -0500 clarification commit 94b5d4526b72096173294ce9cb98262caf65a8c7 Author: stevenj Date: Sat Jan 6 07:51:03 2001 -0500 expanded and updated referencing suggestions commit 1aa77ccd16edf6d860086a198163f6b6fba3d35d Author: stevenj Date: Sat Jan 6 07:22:18 2001 -0500 comma goes outside of link commit 1b6dfe7598855b15b824ae9ff8d00839d0550538 Author: stevenj Date: Sat Jan 6 07:21:14 2001 -0500 fixed capitalization commit 0d7904b6866951159de66703400b30b17801a3ee Author: stevenj Date: Sat Jan 6 07:18:08 2001 -0500 2001 copyright year update commit d7c54c01274efec1dc50603d6774a7f77e2efa82 Author: stevenj Date: Sat Jan 6 07:14:47 2001 -0500 fixed copyright year commit 26c0d8c335af5bfa499653f6001bb9b5b58219f3 Author: stevenj Date: Sat Jan 6 07:13:01 2001 -0500 Added Latin quote and fixed reference. commit 540bf3aeebcbdaf4439906ac409c623d5251616b Author: stevenj Date: Sat Jan 6 07:12:26 2001 -0500 fixed reference commit 88321f9a598c4ac1245ac99781df55249d802b66 Author: stevenj Date: Sat Jan 6 07:03:32 2001 -0500 fixed email commit 10eae3ae2e32e5c570756bb258ceb879cf8bea3d Author: stevenj Date: Sat Jan 6 07:03:05 2001 -0500 updated commit 09780ad35a517f4d0e75ca1ad4845c2f568f96f2 Author: stevenj Date: Sat Jan 6 05:14:00 2001 -0500 read filename-prefix on each output call commit af0b4798931f06871d07b1ef76fb01a4d8a0eff8 Author: stevenj Date: Wed Jan 3 17:52:07 2001 -0500 documented using thunks for band functions commit 820537f442afcce46a9b1afc69100a6c54f1248e Author: stevenj Date: Wed Jan 3 17:43:32 2001 -0500 accept thunks as band functions commit 15561a3a3c36414de18ecc8a8ae5828a454fc03e Author: stevenj Date: Wed Jan 3 06:30:21 2001 -0500 compute-field-energy now returns the fraction of the energy in each field compute-field-energy now returns the fraction of the energy in each field component. Also, fixed a bug in the group velocity calculation when eigensolver-block-size < num-bands. Thanks to Karl Koch for the suggestion and bug report. commit fe42328a6ad15d72d9c48d3d790b5c66ce0603c5 Author: stevenj Date: Wed Jan 3 05:43:04 2001 -0500 fixed calling real syev for complex scalars commit 52f6b8ac242d67511cf447cc2f0e6b7b218bbaae Author: stevenj Date: Sun Nov 12 03:49:33 2000 -0500 separate function for eigenvalues of real matrices, if we need them commit db2090ff16912e34832fcfb627186df4f9a424d0 Author: stevenj Date: Fri Nov 10 07:26:55 2000 -0500 comment commit 8ac6346b40fa04e3be75678bdfe093d1fb07f981 Author: stevenj Date: Tue Nov 7 17:40:00 2000 -0500 changed flop count to double to avoid overflow commit ed3c8227a45ef11900ef46285d6e119878ac237a Author: stevenj Date: Tue Nov 7 02:24:53 2000 -0500 make trace output more closely match other eigensolver's commit 95ae31125a538f61d1d30d8e0211995c5aad19d2 Author: stevenj Date: Tue Nov 7 01:55:58 2000 -0500 print more digits in eigensolver trace output commit 669b2cd0233cc7b6003041cca453fc758e106337 Author: stevenj Date: Tue Nov 7 00:07:29 2000 -0500 added flop count, nwork & davidson user control commit 79435fb5aa28ac4016471b2506a34c310f9cabdc Author: stevenj Date: Tue Nov 7 00:00:57 2000 -0500 noted reference for diamond commit 92dfb6f922ba007b52a848c945e3612475aabb72 Author: stevenj Date: Mon Nov 6 22:52:05 2000 -0500 added dead code for alternate computation method of computing AY... commit e120b9bc1fa8f967fad409d73c2fb6f8eb92ddd4 Author: stevenj Date: Mon Nov 6 22:50:30 2000 -0500 added maxwell_target_operator1 commit fa08df0432f8c882e009f58e5e81c5afdb83f6f3 Author: stevenj Date: Mon Nov 6 02:54:31 2000 -0500 put constraint in a more logical place, after the preconditioner. commit 74ba051372fdf89b0861944d73fa4390c0fbc0fa Author: stevenj Date: Sat Nov 4 08:14:14 2000 -0500 reorder iteration output so it's a little less misleading (iteration 1 is now after the first eigenvector update, and the last iteration can be printed) commit 6eb3175b1c9612fc470007f99fdc7ac41ae0de79 Author: stevenj Date: Mon Oct 30 06:16:14 2000 -0500 use uniform directions on a sphere commit 19a3e8d2a5b2c7e302d29260e97373b5c30cbf65 Author: stevenj Date: Thu Oct 26 06:35:28 2000 -0400 use a slightly lower tolerance for the targeted eigensolver commit f7724a3aaf8f3b57aedee311143466a35d672146 Author: stevenj Date: Thu Oct 26 06:22:19 2000 -0400 updated for new MPB...in particular, 3d numbers have changed because updated for new MPB...in particular, 3d numbers have changed because of the new spherical quadrature, and 2d numbers may have changed slightly because of the new handling of the Gamma points. Also fixed some bugs where some of the tests that I had blithely inserted conflicted with one another. commit c9996083481e323016945c63f3120e510921c847 Author: stevenj Date: Thu Oct 26 05:21:11 2000 -0400 changed default block size, made more flexible commit 3737fe3837c5d0c2b658b75bb0fe9b5db776286c Author: stevenj Date: Thu Oct 26 04:54:29 2000 -0400 print a message to remind the user when we're assuming inversion symmetry commit 0b71e5eb242d4e877d4d17187a4f80a531ce4dbb Author: stevenj Date: Thu Oct 26 04:30:37 2000 -0400 fixed bug in integration (eps_mean, energy in object, etcetera) when fixed bug in integration (eps_mean, energy in object, etcetera) when using inversion symmetry. Because of the funny format output by real FFTs, the fields stored are slightly *over* half of the full "logical" arrays. One has to be careful not to overcount the boundary points. commit 5700756a23098717a405c43518ea9979f3ada334 Author: stevenj Date: Wed Oct 25 08:32:02 2000 -0400 updated commit 3d46a5828a36c2a65eb6a8410c66abf2e24061b6 Author: stevenj Date: Wed Oct 25 08:30:10 2000 -0400 support inversion symmetry commit 17a0ca243acb1f7fe82d386bc686f6e94d4e7059 Author: stevenj Date: Mon Oct 23 04:19:36 2000 -0400 updated commit 62ad004022cd373976fe6f259286fcd6f3f1186d Author: stevenj Date: Mon Oct 23 04:15:39 2000 -0400 added eigensolver-block-size and zero-k handling commit 61c58d521b11665bcc408c43c080309f6530fcad Author: stevenj Date: Sun Oct 22 06:00:16 2000 -0400 added first-brillouin-zone function commit b47ee413f33975612e2e666f93f1b088fc563368 Author: stevenj Date: Sun Oct 22 05:58:51 2000 -0400 documented first-brillouin-zone commit 1da24c8cf4d5802728202d56e31a581882010992 Author: stevenj Date: Sun Oct 22 05:57:25 2000 -0400 added first-brillouin-zone commit 4c85d53837a0ab7809bdd7e04e3639554c86cc9a Author: stevenj Date: Sat Oct 21 22:22:57 2000 -0400 print more angle information commit be7686a7d4000f3a98ae429375a7c0069da93547 Author: stevenj Date: Thu Sep 21 08:03:28 2000 -0400 clarification of compute-field-energy normalization commit 51ad97e34857fd05c8035981a21cc337d95b7661 Author: stevenj Date: Fri Aug 11 00:58:37 2000 -0400 Re-mapping (rectangularizing, etcetera) now maps the center of the Re-mapping (rectangularizing, etcetera) now maps the center of the original primitive cell to the center of the output. Also, the -x, -y, and -z lattice multipliers now apply to the axes *after* the cell is rectangularized. commit cd7720f44fae0158cdc0538b4dbdd58e7e130010 Author: stevenj Date: Sun Aug 6 19:28:37 2000 -0400 Fix test for sunperf...-xlic_lib only supported in Sun cc, not gcc. commit c70ab5dc17ecf5033bda1b55693bdbb6f72f8cdf Author: stevenj Date: Sat Aug 5 02:19:55 2000 -0400 updated PHiPACK URL. commit 9784a99f3cfab3a1e98a8501b6715db4774e3252 Author: stevenj Date: Wed Jul 19 00:51:14 2000 -0400 John likes to go by his initials. commit 1862c25a59ff45607ce27bea055b7df8581481f4 Author: stevenj Date: Tue Jul 18 22:54:05 2000 -0400 noted Meade reference commit 508014fbcfed71eb53aeaa366e36e7159f46391d Author: stevenj Date: Wed Jul 12 03:00:44 2000 -0400 added benchmark commit 51ae9f19a1c45149fc761e8e650ce7781ced7a75 Author: stevenj Date: Wed Jul 12 02:55:36 2000 -0400 Added more sophisticated spherical quadrature algorithm for computing Added more sophisticated spherical quadrature algorithm for computing normal vectors (rather than just using the vertices of an icosahedron). commit 5832fd474820a34ffc92bd320be3bc7a4b58ab9a Author: stevenj Date: Mon Jul 10 04:40:28 2000 -0400 whoops, fixed missing tags commit 091e8c0446822319c967171993995830bbdb6420 Author: stevenj Date: Mon Jul 10 03:51:21 2000 -0400 updated commit e6062c98d484292d9de1643ea25152155d9a1f99 Author: stevenj Date: Mon Jul 10 03:12:10 2000 -0400 Updated frequencies to account for changes due to new 12-point mesh for Updated frequencies to account for changes due to new 12-point mesh for normal vectors in 2d. (This really only affects TE states.) We really need to do a more sophisticated quadrature in 3d, too; good algorithms are apparently available. commit 5e6343dc7931116c0cd1af3779bf5c033f4e30ef Author: stevenj Date: Mon Jul 10 00:46:00 2000 -0400 updated for new sqmatrix_invert arguments commit 2ad49886e9e1e1776f5c087f683f1b875faedee9 Author: stevenj Date: Mon Jul 10 00:42:47 2000 -0400 Added experimental EIGS_ORTHOGONAL_PRECONDITIONER code (doesn't seem to Added experimental EIGS_ORTHOGONAL_PRECONDITIONER code (doesn't seem to give any consistent benefit at this point). commit 1f0856072a3fb4ad9eb6ebbcfbe75222194b14c3 Author: stevenj Date: Sun Jul 9 06:04:08 2000 -0400 fixed typo commit 55e4002f30bb2c1fd1f1c8c677bf907e87016abc Author: stevenj Date: Sun Jul 9 05:27:40 2000 -0400 Updated. commit bcd34f1e7125645b0fde80760ff3055c6ed02dd6 Author: stevenj Date: Sun Jul 9 05:23:47 2000 -0400 documented group-velocity functions commit b0803c2920aa52a1a6438cf44e1f2a2e6346d625 Author: stevenj Date: Sun Jul 9 03:47:50 2000 -0400 documented (index n) commit c074ebf93820297e1633b5895f16a31db44d64e8 Author: stevenj Date: Sun Jul 9 03:34:55 2000 -0400 Added beginnings of a test suite. commit 754909aa1389c27720cfea9787d28f9f181c55f9 Author: stevenj Date: Sun Jul 9 02:20:07 2000 -0400 added -e option to specify orientation commit 7ee3092d4435f1bf9e4d2478f89cfeafcb51dcb8 Author: stevenj Date: Wed Jul 5 00:58:46 2000 -0400 fixed typo commit f6f9105706a57ea39c2510fd539250f2073f6921 Author: stevenj Date: Mon Jul 3 03:37:54 2000 -0400 Use finer mesh in 2d for normal vector computation (so as not to break Use finer mesh in 2d for normal vector computation (so as not to break 90-degree rotational symmetries). I also need to think about the 3d mesh, although it seems to be a hard problem there to come up with general spherically "symmetric" distributions of 3d points. Perhaps some sort of weighted quadrature? commit 6ee8a376f4dccf70c3eb7f2255d1340bf95237a8 Author: stevenj Date: Wed Jun 14 05:15:02 2000 -0400 Yikes! Fixed crashing bug! commit 2dc03722257e876b4d995d0d94d3d4c313c38fb1 Author: stevenj Date: Thu Jun 1 01:46:35 2000 -0400 added initial try at Davidson eigensolver commit 48026d8f1572cc3237e7c9112adfa86df1df9112 Author: stevenj Date: Thu Jun 1 00:43:19 2000 -0400 added sub-headings in installation section, to draw peoples attention added sub-headings in installation section, to draw peoples attention to the two issues they need to consider. Thanks to Maksim for pointing out that this was easily missed. commit 2828076350239f777e308526de2950337ceab608 Author: stevenj Date: Tue May 23 07:30:57 2000 -0400 Added (index n) substitute for epsilon property of dielectrics. commit e406d6cf980846e5fb207128bbc7afadf3f1e618 Author: stevenj Date: Tue May 16 20:04:18 2000 -0400 added experimental (unused) Davidson eigensolver commit a91da960f1117f07247b31d79d4c5e1aa6daa12d Author: stevenj Date: Tue May 16 19:19:43 2000 -0400 updated copyright year commit 0745a9c5f304a870290727ac65293c6f5f61ffcf Author: stevenj Date: Thu May 11 07:44:27 2000 -0400 make sure linmin tolerance is no larger than eigensolver tolerance commit f83d39c19e61acfef3e2422f7612792d7b961bd3 Author: stevenj Date: Thu May 11 04:21:38 2000 -0400 noted inclusion, with permission, of code from MINPACK-2 commit eeb3fedbf5fde68e513070614951b4439d3a706d Author: stevenj Date: Thu May 11 04:03:47 2000 -0400 improved handling of optional Guile sort routine commit 91460e49c7aa5eaad780e0c2f6121c4cfbcf4544 Author: stevenj Date: Thu May 11 00:17:29 2000 -0400 Many changes. Switched to line minimization routine from MINPACK-2, Many changes. Switched to line minimization routine from MINPACK-2, thanks to Jorge More. Added reorthogonalization option to eigensolver, and renormalization of D, to combat numerical problems. Added option (not on by default) to dynamically reset CG based on convergence history, and also another unused option to orthogonalize the first step. Checked to see if Guile provides a sort routine (new in 1.3.4, I think), before using it in mpb.scm.in. (Or should we do this dynamically?) commit 7af52874a4e062e9f6d4a07dc0bcac9a0f5ebd68 Author: stevenj Date: Wed May 3 23:51:54 2000 -0400 more clarification commit e24f0465e93734e048e9e7eb6d827c380b2a153c Author: stevenj Date: Wed May 3 23:45:11 2000 -0400 Use fix-efield-phase to get deterministic field pictures. commit 68ab00dd336fc3ba466f6f713db1682ec32e213f Author: stevenj Date: Wed May 3 22:39:43 2000 -0400 fixed typo commit 85bd36d905ef4ec10748c9be7ab676a6c43917bc Author: stevenj Date: Wed May 3 22:39:28 2000 -0400 documented fix-*field-phase band functions commit 9338b4b132a2a928967a85dfd3f6a253045ad58a Author: stevenj Date: Wed May 3 22:39:11 2000 -0400 added fix-*field-phase band functions commit 260e20a09f41f34ce3c12c613aa3ce9913817e14 Author: stevenj Date: Wed May 3 22:21:06 2000 -0400 invalidate curfield when eigenstates are recomputed. commit 76548dabbae60462eb5b1487dda943ebbfcf1729 Author: stevenj Date: Wed May 3 22:14:21 2000 -0400 clarification in fix-field-phase commit 24b6549a6fad4ad05e4191c37b9bfb2e3777dd08 Author: stevenj Date: Wed May 3 22:04:20 2000 -0400 documented fix-field-phase commit 31ff7a484cce27e61b62cd8470eb6a48fb030bbf Author: stevenj Date: Wed May 3 18:14:59 2000 -0400 fix scaling of energy total returned by compute-field-energy. commit e29841c450782130c56f8b7b8f1bfc8699cd05b5 Author: stevenj Date: Wed May 3 17:54:48 2000 -0400 compute-field-energy returns total unnormalized energy commit dd6f85242141a8d32df8ef5b047db431aa5f70e0 Author: stevenj Date: Tue May 2 01:24:56 2000 -0400 documented new "cone" geometric object type. commit a0dd1ee20fc35811d57f1119bb67ec8431ac5e95 Author: stevenj Date: Tue May 2 01:13:17 2000 -0400 Bug fix in epsilon creation for 2d systems: is now xy plane at z=0, rather than at z=-0.5. commit cdd0beb2d215afcff7e4d3df3b2c3d5c14580b54 Author: stevenj Date: Tue Apr 4 23:24:43 2000 -0400 clarified meaning of block size commit 0eba5bef624048dfaa875a5cf03b3abe00d49d96 Author: stevenj Date: Sun Mar 19 01:21:23 2000 -0500 increased min. denom., and used max(denom,min) instead of (denom + min). commit 2c30593b15f71770ffe7d90f62be3dbfafa90fc2 Author: stevenj Date: Sat Mar 18 07:29:30 2000 -0500 minor updates commit 8f37b69cd9303ac7a496a11525d91f620199bfde Author: stevenj Date: Sat Mar 18 06:19:54 2000 -0500 slight translation tweak to restore parallel structure commit 3367b9d3ae5aa9233ccceb6d42631125111bb2c6 Author: stevenj Date: Sat Mar 18 02:25:50 2000 -0500 fixed bug commit e86f55839442a7ca8e2bbada8d4985a9eddd7055 Author: stevenj Date: Fri Mar 17 16:21:31 2000 -0500 added display-group-velocities band function commit 83ac7eb1f35e3174d58cfbf7b666a5eaefb1422b Author: stevenj Date: Fri Mar 17 15:40:20 2000 -0500 handled case where eigenvals array passed to preconditioner is NULL. commit b2899ce02a5c06d4c650ee51eb117bd14b27d6ea Author: stevenj Date: Fri Mar 17 02:41:30 2000 -0500 added group velocity calc commit 9c4410363c86e01fe558a53cfa55c843583d82c2 Author: stevenj Date: Fri Mar 17 02:40:45 2000 -0500 added maxwell_ucross_op for group velocity calculation commit d4942c6fa26bb1c28a9cb4d91c90cdd560108a12 Author: stevenj Date: Thu Mar 16 22:27:54 2000 -0500 Separated H_from_e computation into its own subroutine, in preparation Separated H_from_e computation into its own subroutine, in preparation for group velocity computation. commit 0e70c0cefef487bf2dd4f08fa41c63191b715db3 Author: stevenj Date: Thu Mar 16 21:31:15 2000 -0500 added cross-refs commit b7ccac22d2c495b42ac08f089a7ea5183b364f85 Author: stevenj Date: Thu Mar 16 21:23:22 2000 -0500 documented coordinate conversion functions from libgeom in libctl-1.2 commit e28e3056f3d04fea04d202c9640351e95a8fc05d Author: stevenj Date: Wed Mar 15 04:43:24 2000 -0500 slightly simpler phase-fixing algorithm (don't discriminate between components). commit eff7a334e83123fd14d6ff5cbd784ea2a8be165d Author: stevenj Date: Wed Mar 15 04:28:50 2000 -0500 removed debugging printf commit c82029156c2e3f1e5459c1364c84b8d26b717bd2 Author: stevenj Date: Wed Mar 15 04:00:32 2000 -0500 Added fix-field-phase function (currently undocumented), based on Added fix-field-phase function (currently undocumented), based on a suggestion by Doug Allan. commit 40bcb3a09d0424848f7cfefe74a631422049b731 Author: stevenj Date: Tue Mar 14 22:20:00 2000 -0500 be sure to do sums, etcetera, over all processors commit 1ebe68e57e322e46cf9ebbad11515c5d0c347de7 Author: stevenj Date: Tue Mar 14 22:01:02 2000 -0500 bug fix in outputing imag. part range (thanks to Doug Allan). commit fefd2709285183e00516c5196fca8e931d46aa38 Author: stevenj Date: Wed Mar 8 21:29:35 2000 -0500 clarification commit 915923948ad9b89c10a4c957d53cf084e7cedfb3 Author: stevenj Date: Wed Mar 8 21:27:46 2000 -0500 added suggested reference commit ccb2ac837bbf66f41c9973144d2b3a5c74816e60 Author: stevenj Date: Mon Feb 28 21:18:25 2000 -0500 addressed FAQ on fcc lattice units commit a4e8448a8c3e7bc8e6ff9615b58876316be7957c Author: stevenj Date: Tue Feb 22 17:02:37 2000 -0500 got rid of debugging printf commit 0c8f14ea579f7cb2aa1e542cbb5585763425b5cc Author: stevenj Date: Mon Feb 14 19:48:34 2000 -0500 sum times over processors, and a couple of other cleanups commit 0fc444bc851486d0e19ce7faeae10e4594e6aadd Author: stevenj Date: Mon Feb 14 07:01:19 2000 -0500 fixed comment commit 3edc42ae822406dd21315194382d24c48cd759ea Author: stevenj Date: Mon Feb 14 05:34:23 2000 -0500 Corrected operation counts when projecting the preconditioning. Changed Corrected operation counts when projecting the preconditioning. Changed some flag names and orderings, and added EIGS_FORCE_APPROX_LINMIN. commit e235d3c6b4291d3302b005d9c818b494eda646a8 Author: stevenj Date: Mon Feb 14 05:09:35 2000 -0500 added documentation for linmin commit 28d00080a7859df490043d24738bb6c02262b88a Author: stevenj Date: Mon Feb 14 04:53:31 2000 -0500 pass correct U to eigensolver_get_eigenvals_aux commit c2db4472f915553425978fe23d6bd885b2af8959 Author: stevenj Date: Sun Feb 13 21:00:23 2000 -0500 added adaptive algorithm choice commit eae99534a1f1fc4b608d88d64d884c69e4044325 Author: stevenj Date: Sun Feb 13 20:31:52 2000 -0500 don't precondition when randomizing fields (it doesn't really seem to help). commit 299713ea2b6eff843030d7b14c43241fc1ef7e20 Author: stevenj Date: Sun Feb 13 08:07:08 2000 -0500 Added approximate (2-point) line minimization. Disabled for now, until Added approximate (2-point) line minimization. Disabled for now, until the runtime self-optimization code is added. commit c1471dee961bee04d3cdd4b4c67bc4371a49bf74 Author: stevenj Date: Sun Feb 13 06:43:50 2000 -0500 rewritten eigensolver commit 66020bf821963b133da0b63b13ffb5c355d46c14 Author: stevenj Date: Sat Feb 12 22:23:04 2000 -0500 noted change in mpb-data commit 6e371d92faa1833bbe3e34fcbefd9db16b4bf98b Author: stevenj Date: Sat Feb 12 22:00:06 2000 -0500 bumped version commit e736152694ad97810cfa3b28262b22f054914a68 Author: stevenj Date: Sat Feb 12 21:23:48 2000 -0500 Yikes! Bug fix in zparity stuff for even nz!! commit 74efe9f7714d0dd9e0b4015aff40deeb5dfd30ba Author: stevenj Date: Wed Feb 9 23:22:27 2000 -0500 documented band-range-data output var commit 22c64e2421bbfec80c15f6f2e05fe39a7373fde9 Author: stevenj Date: Wed Feb 9 23:17:59 2000 -0500 updated commit dc8ff4bc64f2902ee2dbcb43795dbf0511649b53 Author: stevenj Date: Wed Feb 9 23:14:45 2000 -0500 noted changes commit f0b72126ae15bda06ee943085442ae1714764308 Author: stevenj Date: Wed Feb 9 23:11:15 2000 -0500 noted --without-hdf5 fix commit 9a30a8bb2f326051fdac3028313bf5554e894071 Author: stevenj Date: Wed Feb 9 23:10:54 2000 -0500 Warn user if -lhdf5 is found but hdf5.h is not (probably an error). commit 452651809b3007d02cc7cccb70d211be5a131729 Author: stevenj Date: Wed Feb 9 23:04:29 2000 -0500 fixed compilation --without-hdf5 commit 221215c9f7d046d8d4d4e89cd8e07fd989922d83 Author: stevenj Date: Tue Feb 8 06:40:20 2000 -0500 slight clarifications commit d5f9ed37ad3d51a924b7eac113a534c459019bd8 Author: stevenj Date: Mon Feb 7 02:30:24 2000 -0500 updated run time for diamond lattice commit 726d7f77b5660d32db3d94a29399d478b440fe00 Author: stevenj Date: Mon Feb 7 02:17:04 2000 -0500 slight clarification commit 329f9d77cd04e8014aef0807ad7f7aa9c00e1c71 Author: stevenj Date: Sun Feb 6 02:43:38 2000 -0500 creating a dataset deletes pre-existing ones commit 9aa07413db264ba4461927849e92ac9abe477d46 Author: stevenj Date: Sat Feb 5 22:03:02 2000 -0500 updated to check for ATLAS 3.0 libraries. commit 165948565ccddad1d6c5b7b4e9dbd692b4ba9ff0 Author: stevenj Date: Fri Feb 4 01:37:35 2000 -0500 document current-k variable commit 403e653056c8c807f96dfd6356b3e33093394b3c Author: stevenj Date: Tue Feb 1 03:30:58 2000 -0500 fixed typo commit 96a82073a5d3285aa59a9c8754a6c80275c6fe2e Author: stevenj Date: Tue Feb 1 03:12:26 2000 -0500 updated to use h5topng 1.3.4 images (much nicer contour lines). commit dcffdc40de68a8d51a2354db270f5f946191504e Author: stevenj Date: Tue Feb 1 02:16:35 2000 -0500 noted random phase commit 0c35215e0d09ea9c0e73bc04bc617a0d050b14dd Author: stevenj Date: Sat Jan 29 19:34:56 2000 -0500 output band range data commit a04235ae96308557a78483046175e0935a47c516 Author: stevenj Date: Sat Jan 29 18:03:57 2000 -0500 Fixed -d help in -h info. commit 2fbaf56cf33b387397172d1b7c293390d68aaa95 Author: stevenj Date: Sat Jan 29 17:35:00 2000 -0500 small change commit 064dd72cd7ab318aff400747472cf4d6306c7015 Author: stevenj Date: Sat Jan 29 04:45:37 2000 -0500 fixed typo commit 99b890fedaae6c59e40ce5536606346c1d8e2606 Author: stevenj Date: Sat Jan 29 02:54:42 2000 -0500 bumped version commit 9cede5c2d8e6c6d83b27e608200ea5e3fb0dee7c Author: stevenj Date: Sat Jan 29 02:50:00 2000 -0500 updated commit 6f91e98b28979de013d7b2b1c9850e5967c9635a Author: stevenj Date: Sat Jan 29 02:36:46 2000 -0500 mentioned data analysis tutorial commit f28d0a7d55d31d537f276a8847c9af8b07134829 Author: stevenj Date: Sat Jan 29 02:32:25 2000 -0500 grammar fix commit d00357482395528d7d6d766847d16403d3e7653d Author: stevenj Date: Sat Jan 29 02:28:55 2000 -0500 slight change commit ebf6746f636e18e4798d51eafd68de593937a024 Author: stevenj Date: Sat Jan 29 02:25:57 2000 -0500 Handle case of trying to create dataset where one already exists. commit 267985a14097a9140c2fd9fd19a37b5450d8ff4b Author: stevenj Date: Sat Jan 29 02:25:14 2000 -0500 updated for data analysis tutorial commit d93b18e7b45d4f4742c30523ff2fcc226aca1607 Author: stevenj Date: Sat Jan 29 02:24:42 2000 -0500 added data analysis tutorial commit 3d4bbea08b2bf90fe4cb4bff7e7cce719ceff732 Author: stevenj Date: Fri Jan 28 20:11:25 2000 -0500 minor change commit eeb319339efc2a840d7b764bd6a450eb771221ef Author: stevenj Date: Fri Jan 28 19:58:53 2000 -0500 noted that PATH may need to be updated, and some other small changes commit ab87897c2f0a97003108ea421c1a4419d48fa88a Author: stevenj Date: Fri Jan 28 01:49:18 2000 -0500 noted make distclean commit 4641cdff431be8d729988a8b5ef5b372a7355d08 Author: stevenj Date: Fri Jan 28 01:44:28 2000 -0500 slight formatting fix commit 844a9481198361379f2ed99bc6e4499a09c4d1cf Author: stevenj Date: Fri Jan 28 01:41:26 2000 -0500 Added section reviewing how to set up installation paths, etcetera. commit 22b7ca3198a7f3372ade4f82e58c949adcf7d474 Author: stevenj Date: Fri Jan 28 00:50:44 2000 -0500 added diamond (fcc) lattice example commit 5ab08b540e0506ea0faf048088a549792e116a14 Author: stevenj Date: Fri Jan 28 00:21:10 2000 -0500 report elapsed time for initialization commit fce55074883ff5eddcc65913e0ccfa9255ec7eb7 Author: stevenj Date: Fri Jan 28 00:14:49 2000 -0500 fixed display-eigensolver-stats for num-runs=0 commit 8a1465a65ea9f7893913d6b510f70ea6c8f288f4 Author: stevenj Date: Fri Jan 28 00:07:05 2000 -0500 use output-at-kpoint in tutorial commit d2f002070befeeb8e25ed926900486cc1828660c Author: stevenj Date: Fri Jan 28 00:02:03 2000 -0500 Documented output-at-kpoint. commit 93b87be6314cd28ce9579f387893e687f2f39c10 Author: stevenj Date: Thu Jan 27 23:57:50 2000 -0500 Added output-at-kpoint function. commit 80bdeec935d201858a4ecb821184130173e1aea7 Author: stevenj Date: Thu Jan 27 23:49:10 2000 -0500 added mpb man page commit f754b5fd0f4b062f61049e98cf2fc9789db3faa1 Author: stevenj Date: Thu Jan 27 23:14:38 2000 -0500 Added mpb-data utility, so we can finally unskew datasets (and more). commit d6dd29f2c2d12829b10a2226b6c7f846fbc075d6 Author: stevenj Date: Thu Jan 27 21:24:17 2000 -0500 Suppress HDF5 error messages if we try to read a nonexistent dataset; Suppress HDF5 error messages if we try to read a nonexistent dataset; just return NULL. commit f843dbc8093f25d7303f223108dcce9b76cd92c4 Author: stevenj Date: Thu Jan 27 04:51:39 2000 -0500 write out Bloch wavevector in reciprocal, not cartesian, basis. commit 52d33895e14f60a1f5e83ba66a1c0093714f1a2f Author: stevenj Date: Thu Jan 27 01:33:33 2000 -0500 set SHELL commit 3a2147e518aeaad927c4cc11b675f07f2d475510 Author: stevenj Date: Thu Jan 27 00:46:29 2000 -0500 Added attribute-reading code, and made it possible to check at runtime Added attribute-reading code, and made it possible to check at runtime if a dataset exists in a file (by returning an NULL instead of dying if the dataset doesn't exist when we try to read it). commit cf4caf98974b52146e740858b3cda793489b2786 Author: stevenj Date: Wed Jan 26 22:38:22 2000 -0500 updated commit 504885180dec869269407a32c874b2e1d3d44980 Author: stevenj Date: Wed Jan 26 22:25:37 2000 -0500 added link anchors at h2 section headers commit 49c8047f974670c721a879caddcfa6047e2055ab Author: stevenj Date: Wed Jan 26 22:14:37 2000 -0500 added anisotropic tutorial commit 39d30a0ce563d28846cdfbb04a48e793d6135540 Author: stevenj Date: Wed Jan 26 20:08:39 2000 -0500 bug fix in definition of dielectric-anisotropic commit 2576976ee51bbc057c98315ac00826da42c24447 Author: stevenj Date: Wed Jan 26 19:52:13 2000 -0500 updated commit 0facb1f80c09e23a6502172146aa2a50162e7b72 Author: stevenj Date: Wed Jan 26 17:40:56 2000 -0500 zparity and run-even/odd now work correctly for 2d grids. zparity zparity and run-even/odd now work correctly for 2d grids. zparity calculation is also now ready for use with MPI. commit 8bd4549d840710e83717e36e16a0ed0cd0245ac9 Author: stevenj Date: Wed Jan 26 16:54:16 2000 -0500 fixed typo commit dc800738b5c7ab4a704fa023aae6624a30378bdb Author: stevenj Date: Wed Jan 26 04:09:36 2000 -0500 added anisotropic dielectrics commit 89096766e4e46041100d42cabd03369d26adcdca Author: stevenj Date: Sat Jan 22 05:57:27 2000 -0500 Fixed bug in output-dpwr-in-objects. Thanks to Mihai Ibanescu for the Fixed bug in output-dpwr-in-objects. Thanks to Mihai Ibanescu for the bug report. commit b0300a0ea4db4e5ce8d12e05e5d81a0dbb6092be Author: stevenj Date: Fri Jan 21 02:18:27 2000 -0500 output all components in one h5 file commit 8263a8a6c463b5587a6bcd591d4a4e433301c3b2 Author: stevenj Date: Fri Jan 21 01:41:32 2000 -0500 fixed typo commit 8e518d06016db62ae1f1350286ddd8f76c33a975 Author: stevenj Date: Fri Jan 21 00:19:03 2000 -0500 tag output datasets with k & R attributes commit 6ba45f1b3429b1340a37555949d2cd9956055784 Author: stevenj Date: Mon Jan 17 03:00:19 2000 -0500 yet more felicitous translation commit b5a5ef1baa0e0dba3a801cb776c7000ba1c1b5aa Author: stevenj Date: Mon Jan 17 02:53:45 2000 -0500 more felicitous translation commit d495ea3cf82f082db7aac2c583ffef7758864006 Author: stevenj Date: Mon Jan 17 02:29:51 2000 -0500 fixed typo commit 670785aee9b1399c115581d5b771883ad3278aa9 Author: stevenj Date: Fri Jan 14 21:33:20 2000 -0500 INCLUDES -> CPPFLAGS commit dd16d797e492e89cf29398401d99d48565d4a55d Author: stevenj Date: Wed Jan 12 02:02:09 2000 -0500 Added dependency rule to ensure ctl-io.h is created before main.o is Added dependency rule to ensure ctl-io.h is created before main.o is built. Thanks to Christoph Becher for the bug report. commit 180a813515da3e2cbf6d2781eb123bcbfa8b33f8 Author: stevenj Date: Wed Jan 12 01:39:16 2000 -0500 Need to set the SHELL in the Makefile for non-GNU makes. Thanks to Need to set the SHELL in the Makefile for non-GNU makes. Thanks to Christoph Becher for the bug report. commit 4033c46511b475c1c4ac5774dd91b2b5a1af176f Author: stevenj Date: Tue Jan 11 21:04:51 2000 -0500 user-ref.html commit b196eb05e770411987b6d98e380619c43393564e Author: stevenj Date: Fri Jan 7 18:37:44 2000 -0500 updated commit b1f4e777a275656f51dd0f3cf84aeef9695ecbce Author: stevenj Date: Fri Jan 7 18:35:11 2000 -0500 0.9.1 eigensolver bugfix (yikes\!) commit 3cee20fc5acd52f77896c47994a37ed6a99e454a Author: stevenj Date: Tue Jan 4 05:52:41 2000 -0500 noted units of reciprocal lattice vectors in output commit 8340fc05516f70d7eb630606857c39bab497780c Author: stevenj Date: Tue Jan 4 05:50:29 2000 -0500 noted filename-prefix fix commit 01cc03d6ba988193532fa4ee1ac1ba92cf098cce Author: stevenj Date: Tue Jan 4 05:48:30 2000 -0500 bug fix...prefix goes *before* filename; thanks to Karl Koch. commit 99a5c9a196507cb5943879dda22cf5fb2c622c09 Author: stevenj Date: Sun Jan 2 17:29:20 2000 -0500 updated commit fef1ff094c84bbfc0e204cfd5f7b0eecda036237 Author: stevenj Date: Sun Jan 2 17:15:24 2000 -0500 slight fix commit d7b4d7071cc984e803cd0cd449626875d4d9422f Author: stevenj Date: Sun Jan 2 17:02:01 2000 -0500 noted more changes commit b548aa74156122d194c7a4ffde4ff57d82d87a59 Author: stevenj Date: Sun Jan 2 16:57:46 2000 -0500 noted polarization (e.g. ".te") in the output filenames. commit a537dfc6aac272b45ebbe7774e08e10848e93fe2 Author: stevenj Date: Sun Jan 2 16:47:39 2000 -0500 slight rewording commit a49e8d6a423a3cf29f08273bd033c0dc6383c598 Author: stevenj Date: Sun Jan 2 16:36:35 2000 -0500 version-numbering scheme is now 0.8, 0.9, 0.10, ... commit c3e96ae7a26671d3936a0897042cc4f5aa2deed1 Author: stevenj Date: Sun Jan 2 05:03:10 2000 -0500 small formatting fix commit 5db7186400383a125f93dd3293c7a4789fc116cc Author: stevenj Date: Sun Jan 2 04:52:03 2000 -0500 updated commit 72b52e58ffabd1bd53122f753b9dabd89e371453 Author: stevenj Date: Sun Jan 2 01:04:12 2000 -0500 slight rewording commit 6409e9a02aa50007d2c6c904197b12610c9760f1 Author: stevenj Date: Sun Jan 2 01:01:51 2000 -0500 added version number to NEWS commit 8c7afd036efbeb27bd0232e8b8230ad7be368b8d Author: stevenj Date: Sun Jan 2 01:00:57 2000 -0500 removed inconsistent parens commit c9dbcb162792dc24d10e223c6936b5d24b4197a5 Author: stevenj Date: Sun Jan 2 00:59:35 2000 -0500 added z-parity output var commit 54ad352193a4a180aa0432a474701661d5a3ff7c Author: stevenj Date: Sun Jan 2 00:44:53 2000 -0500 fixed counting bug in zparity computation commit e55653d55dc19fe44c83049b5d24836627d4c00d Author: stevenj Date: Sun Jan 2 00:11:52 2000 -0500 configure works without f77 compiler, hopefully commit f9f1f226077fd40368ec452c8292bf9868835e60 Author: stevenj Date: Sat Jan 1 23:50:26 2000 -0500 bumped copyright year commit 123bf6566398af384cb9f5284801e274b5177f15 Author: stevenj Date: Sat Jan 1 23:45:35 2000 -0500 bumped version and went to 2-digit minor version numbers commit 7c04e1235f7a041bcea813d8c49ce21a24c1d738 Author: stevenj Date: Sat Jan 1 23:43:16 2000 -0500 added run-even and run-odd commit 1e8388195d9c7e934b346d160ae3a0f79cd06272 Author: stevenj Date: Tue Dec 14 02:43:57 1999 -0500 defined reciprocal lattice commit ddb6b0c3e7ffdc8627339dca1bc358f04dc208c6 Author: stevenj Date: Tue Dec 14 00:12:10 1999 -0500 slight wording change in quotation commit 6f56e2cab974e4a0d2b4bba30ca202e549cb31ab Author: stevenj Date: Tue Dec 14 00:06:52 1999 -0500 better translation commit e64bcc667fd399e96021d9c3c344d8fe2f8f9435 Author: stevenj Date: Mon Dec 13 23:55:56 1999 -0500 added St. Augustine quote commit bd716275b2fdd9ec8a8f2455c67d7c5cde81a661 Author: stevenj Date: Thu Dec 9 00:11:11 1999 -0500 slight fix commit 75d9fb6742eb702c62acafce84cb33fe9e1b84ff Author: stevenj Date: Sun Dec 5 21:07:58 1999 -0500 various improvements commit 19bce1d629a98807a50f78adf82f36cf90408ceb Author: stevenj Date: Fri Dec 3 20:03:56 1999 -0500 fixed substrate commit 8acb368a428f78e251ef1e1b676a73241891b534 Author: stevenj Date: Fri Dec 3 19:55:12 1999 -0500 allow substrate commit e102f792fc51a7edd7f08098f5824c9fe1879fd2 Author: stevenj Date: Fri Dec 3 05:07:35 1999 -0500 Added 2d triangular lattice of holes example. commit 7618a5177c944913536d460da4bf1a6b9c910451 Author: stevenj Date: Thu Dec 2 06:40:01 1999 -0500 warned of false-positives in band gaps commit 66b9f38be126170876e63db59c252982c3c61608 Author: stevenj Date: Thu Dec 2 05:16:44 1999 -0500 Use CHK_MALLOC everywhere. For one thing, this prevents problems Use CHK_MALLOC everywhere. For one thing, this prevents problems when we allocate 0 bytes on systems where malloc(0) returns NULL. commit b8044077f12ae49dd7cc1f8834200e91fc24fc9e Author: stevenj Date: Thu Dec 2 01:44:51 1999 -0500 handle num-bands = 0 commit be645611d1150fd111d6a0c8afc0a3be1a7d2d31 Author: stevenj Date: Wed Dec 1 04:04:48 1999 -0500 enable delay-cg by default commit 9b79edb6aa85ccd3a1962f84f8485c7a8cd2d1aa Author: stevenj Date: Wed Dec 1 04:00:55 1999 -0500 print warning in verbose mode for large lambda commit 37cff7a300512ec0b82c4a1cee4e0d0e87479f21 Author: stevenj Date: Wed Dec 1 03:04:07 1999 -0500 fixed median bug for odd sizes commit 49e763a3efc73607402ae8ffba2ce89b9490a75b Author: stevenj Date: Wed Dec 1 02:50:03 1999 -0500 added display-eigensolver-stats commit 9dfd97b25a239f1dd10bd4122c1ca4087f62838a Author: stevenj Date: Wed Dec 1 02:49:19 1999 -0500 added EIGS_DELAY_CG flag...don't enable by default until we do more tuning commit 67a0cf64240ced8141519e72185871a2ca2247a9 Author: stevenj Date: Tue Nov 30 23:47:35 1999 -0500 don't use cg with analytic multimin (multimin screws up cg) (because of don't use cg with analytic multimin (multimin screws up cg) (because of this, multimin is probably not worth it) commit 12b5403dc62137c8efcd1dda44d94a795bc3d5b1 Author: stevenj Date: Tue Nov 30 04:18:48 1999 -0500 got rid of gcc warning commit 78020c453e53d830f12c66e1dab2e2e69158db7b Author: stevenj Date: Tue Nov 30 04:06:40 1999 -0500 randomize-fields now randomizes both the real and imaginary parts. randomize-fields now randomizes both the real and imaginary parts. Previously, it just set the imaginary parts to zero (which is fine for structures with inversion symmetry, but in general cases I don't see any justification for it). commit ae19cbdbb29f0f738577bce289f1c3916051c67e Author: stevenj Date: Tue Nov 30 04:05:00 1999 -0500 verbose mode now prints out trace on every iteration. commit 5a2d9b95dcbcd9b8bf9c8591430ad37cdc0c9e43 Author: stevenj Date: Mon Nov 29 22:00:05 1999 -0500 updated commit b0b2eaac904585eaff57042136096968662f65b4 Author: stevenj Date: Mon Nov 29 21:47:54 1999 -0500 fixed trailing spaces in sed command; thanks to Ron Chase for the bug report. commit 3279fc42684fa0b64e2175b9152d1194fdcf1fd1 Author: stevenj Date: Mon Nov 29 21:31:13 1999 -0500 incorporate FLIBS into LIBS commit 5e55106ca98d9ad0ece7ec6c01c609b26cbd3ab7 Author: stevenj Date: Mon Nov 29 20:58:22 1999 -0500 more explicit instructions for LAPACK and BLAS. commit 046cef6820e706efcbf5366dd36053d9de26473a Author: stevenj Date: Thu Nov 25 06:25:09 1999 -0500 minor improvements, mostly to comments commit 08257aef940a7fc8c3ef58c0abc0ffc1d2fd6332 Author: stevenj Date: Thu Nov 25 05:53:07 1999 -0500 get rid of warning commit bf944b08c5e5e7864cf27b04108e6949e30e3488 Author: stevenj Date: Thu Nov 25 05:51:55 1999 -0500 don't redeclare lambda (also gets rid of possiblity of prev_lambda being don't redeclare lambda (also gets rid of possiblity of prev_lambda being assigned to undefined variable) commit 3609a42f17ddfa137b35ec79619606b69b090e54 Author: stevenj Date: Thu Nov 25 05:50:16 1999 -0500 added 'make snapshot' commit 40adddd5b64302bb5d6a7633c4a3ca0260b14d90 Author: stevenj Date: Thu Nov 25 05:38:20 1999 -0500 slight rewording commit aa3fd115a67f46ed11e5e76f61ff401f1cd92d8a Author: stevenj Date: Thu Nov 25 05:34:15 1999 -0500 added epsilon-input-file input var commit ff9d7a10a60834d64fe9701a9b72651894bbf58b Author: stevenj Date: Wed Nov 24 05:05:47 1999 -0500 added eigensolver-flags input variable commit d9fa5c931903870073afa0832d88234b8c46eec7 Author: stevenj Date: Wed Nov 24 05:03:47 1999 -0500 Added EIGS_ANALYTIC_MULTIMIN, but don't enable by default until I Added EIGS_ANALYTIC_MULTIMIN, but don't enable by default until I can fix the convergence. (Maybe by implementing a generalized conjugacy condition for conjugate gradient?) commit e4ba47a5f698b64d1405e2bfe2d27ddd559ad930 Author: stevenj Date: Wed Nov 24 03:27:20 1999 -0500 commented on non-storage of U and YtAYU; also changed iteration counter commented on non-storage of U and YtAYU; also changed iteration counter to be 1-based in verbose mode commit 3b373bf5af71363c940a4cd6df76ad488aa98aa6 Author: stevenj Date: Wed Nov 24 03:24:30 1999 -0500 optimized when matrices are diagonal commit f0fd2270c0d5fd942fbfb6d2fdba75287a1b3da1 Author: stevenj Date: Mon Nov 22 05:12:35 1999 -0500 bumped version commit d814ee0e2a304a27514e7a4d2d0897d73e8e3b6b Author: stevenj Date: Mon Nov 22 05:12:14 1999 -0500 noted (scheduled) 0.8.1 release. commit 970f8828500b3e096ad4028f57c6d75db40f5b06 Author: stevenj Date: Mon Nov 22 01:20:27 1999 -0500 added comparison with time-domain commit 13edbe6d7cc23ae8eec08f57fc103f229abb1c1e Author: stevenj Date: Sun Nov 21 17:59:19 1999 -0500 output-hfieldz, etc -> output-hfield-z; also use these functions in tutorial commit b13be0740ae5ed033ee2e151113ded4a1c0b1ac4 Author: stevenj Date: Sun Nov 21 09:36:43 1999 -0500 noted changes commit dca257c52481c683458fb4ef7e05253a16b9b4cd Author: stevenj Date: Sun Nov 21 09:34:04 1999 -0500 speed up saving non-contiguous data commit 6bf37f44c9a68ab91c1b5f04a945f2e53c8a9bbf Author: stevenj Date: Sun Nov 21 09:18:01 1999 -0500 added output-field[xyz] and friends commit 6295b675bc8f0dbca068d3c4fc529984e28d0e7f Author: stevenj Date: Sun Nov 21 08:28:50 1999 -0500 Sped up phase calculations in field output (but to no avail, it seems), Sped up phase calculations in field output (but to no avail, it seems), and set things up for outputting only a single component of a vector field. commit cab2930f47d680163782de48b38894c910f3d640 Author: stevenj Date: Sun Nov 21 07:55:35 1999 -0500 fixed typo commit 87baecb3d44cc90dc2a6823280c1cd5bf46224b9 Author: stevenj Date: Sun Nov 21 07:54:37 1999 -0500 added output-copies variable commit a8c2282be2bf45378cef80493d44fa259f824841 Author: stevenj Date: Fri Nov 19 03:39:35 1999 -0500 noted modification to geometric-objects-lattice-duplicates (thanks to noted modification to geometric-objects-lattice-duplicates (thanks to Karl Koch for pointing out the deficiency in the previous version of this function). commit f2a22595ae1b87e6291763ecc170fb545a95cce3 Author: stevenj Date: Fri Nov 19 02:54:41 1999 -0500 removed beta from version number commit 59d81400b4489e6d3b4b41063107992202ce9aa7 Author: stevenj Date: Fri Nov 19 01:50:12 1999 -0500 improved timing routines to avoid overflows commit 3e99ea21de342466040b2d10b06e228fb4fc2274 Author: stevenj Date: Fri Nov 19 01:16:55 1999 -0500 avoid y2k problem commit e3e6ce22ce365a83c451a47b881525755cc596e0 Author: stevenj Date: Fri Nov 19 00:49:24 1999 -0500 added NEWS file commit 8cb75a0453d2260652677549c068208e54914d72 Author: stevenj Date: Fri Nov 19 00:47:43 1999 -0500 added my email address commit be64bc54f25da6dfeb57843045d0fc635ca32939 Author: stevenj Date: Fri Nov 19 00:46:37 1999 -0500 updated commit 1c517fdd05ec4f31dbf5282fb4b33be66fbc53dd Author: stevenj Date: Fri Nov 19 00:45:13 1999 -0500 updated and cleaned up a bit commit 05c3170e6470803cc6a79bd94d65a61a1d3d2c84 Author: stevenj Date: Fri Nov 19 00:39:56 1999 -0500 noted example ctl files commit 55a74b2d6f6f12a517215c5d62203e24f8c9da0b Author: stevenj Date: Fri Nov 19 00:35:17 1999 -0500 output hfield instead of dpwr. commit 83d6ea1e6dfbb5fc211a623d9ff0d1e257b63c8a Author: stevenj Date: Fri Nov 19 00:33:38 1999 -0500 added hole-slab example commit 5aedd2811260ddec458036ea6f85fb1e9d221c28 Author: stevenj Date: Thu Nov 18 20:43:17 1999 -0500 don't look in ../libctl and print error if libctl not found commit 47423d06834994e50dfa09e830ac26d235bef4a0 Author: stevenj Date: Thu Nov 18 20:42:49 1999 -0500 flush iteration output commit 250d6f0cf4745d422cd5b29ab2fd4d0395cf2ba2 Author: stevenj Date: Thu Nov 18 20:02:17 1999 -0500 added current-k global commit 08b2cce12155a4b24beb4868f77c911092fc1f3e Author: stevenj Date: Thu Nov 18 20:01:28 1999 -0500 print out geometry box tree in --verbose mode commit e179566643e841df86edb1bfa0f85c8a855e26a2 Author: stevenj Date: Thu Nov 18 18:54:11 1999 -0500 slight cleanup commit 2680747cad2007ff47b8f44def8cf12599e39797 Author: stevenj Date: Thu Nov 18 18:38:35 1999 -0500 updated examples commit b11a883f0b72aa3cdcd928da8fdb7b3a121fb18d Author: stevenj Date: Thu Nov 18 18:09:59 1999 -0500 recommend using mpb foo.ctl >& foo.out so that foo.out catches errors. commit 0b01f2436b6231e6afab66e56515ac9c232b7ae4 Author: stevenj Date: Thu Nov 18 05:33:36 1999 -0500 added 'make dist' target commit 32ab8eb125b337fb134ae04e2e73e241a8fa96d1 Author: stevenj Date: Thu Nov 18 05:04:58 1999 -0500 explained that hack from 1.32 was to get good convergence. commit b4fc6478caecc41db7411f5def501095920b1493 Author: stevenj Date: Thu Nov 18 05:02:08 1999 -0500 hack: for some reason I don't comprehend, it is necessary to hack: for some reason I don't comprehend, it is necessary to re-randomize the fields before doing a zero-k point, at least with the new "analytic" linmin in eigensolver.c. Hey, it works, and it can't do any harm. commit c413f566b506a911f26fbfae0596899f51804490 Author: stevenj Date: Thu Nov 18 04:47:27 1999 -0500 bumped beta version number commit fdfdfedf16e7e30f2de62d73e07366eacfd1a9d2 Author: stevenj Date: Thu Nov 18 04:28:18 1999 -0500 Added explanatory comment to sqmatrix_AeBC, noting the probable relative Added explanatory comment to sqmatrix_AeBC, noting the probable relative efficiency of various operations. commit 4526cecb04e7070a11b6eabe488c00bce1a9a6d9 Author: stevenj Date: Thu Nov 18 04:22:38 1999 -0500 tiny fix in comment commit 365881560c4ebcf5b3ee40708a393bbd4b224053 Author: stevenj Date: Thu Nov 18 04:17:05 1999 -0500 Added "analytic" line minimization based on exact minimization of Added "analytic" line minimization based on exact minimization of rigorous expansion of the functional for small displacements (truly exact for p=1). Also cleaned up eigensolver code a bit, giving generic names to matrices UYtAYU and Usqrt that were being used for lots of random things. commit ded918085ceb7a1280a226bad0180a4856da6069 Author: stevenj Date: Wed Nov 17 23:56:34 1999 -0500 grammar fix commit f502e2e11a995fd476578c0c834b343355691d21 Author: stevenj Date: Wed Nov 17 23:51:20 1999 -0500 link to feature list at MPB home page. commit 1cda10e85f500735585d6c3212f8b5ed35069e76 Author: stevenj Date: Wed Nov 17 23:44:16 1999 -0500 slight wording change commit 4fb10ddacf3258cf590c72e1e8abc3e1259573fe Author: stevenj Date: Wed Nov 17 23:41:42 1999 -0500 noted author commit acd232d55702c732e320cbfea03cfca8dddd6c85 Author: stevenj Date: Wed Nov 17 23:26:31 1999 -0500 gnu web page -> gnu web site commit f41f15d3e5f7e7834e5f7eb2838f64eb4f44d513 Author: stevenj Date: Wed Nov 17 22:08:33 1999 -0500 sumfrq -> freqs, etcetera commit 9ebee8fe6298bb1d4c07e824317b5a239a7ced1d Author: stevenj Date: Wed Nov 17 21:59:37 1999 -0500 interactive -> interactive? commit ce59450bbc8855b4f6364a62da3adfed452d27ea Author: stevenj Date: Wed Nov 17 21:52:21 1999 -0500 Put in special-case code for k ~ 0 lowest bands (constant fields), to Put in special-case code for k ~ 0 lowest bands (constant fields), to fix problems with slow convergence. commit e5ac1791c3dd585b5dcb342041357115ddaf0444 Author: stevenj Date: Wed Nov 17 20:30:24 1999 -0500 Added constraint "chaining" utilities. commit c5a96ec439471a465eb628aecc11cc4e8044747c Author: stevenj Date: Tue Nov 16 07:10:08 1999 -0500 renamed check variable (don't reuse E2--bad style) commit 3277a7ac3f9c49602248bada8d81a9e97213b68a Author: stevenj Date: Tue Nov 16 06:55:53 1999 -0500 noted that 2d grid does not mean k is 2d commit 50809b6a006e5be56cd6b3def119f9e44684b55c Author: stevenj Date: Tue Nov 16 06:54:22 1999 -0500 -> , and fixed missing close tag (why have I been closing -> , and fixed missing close tag (why have I been closing everything with ?) commit f036c3ab266b155943550e8620325d4557550e91 Author: stevenj Date: Tue Nov 16 06:01:13 1999 -0500 added missing return statements in error code commit a7200af21f375150c65730e7b40e26f63fd3df1f Author: stevenj Date: Mon Nov 15 23:51:42 1999 -0500 we can't add HDF4 support because the HDF4 license conflicts with the GPL commit a8c0f68fe0630761029903057c12df0ec9b87134 Author: stevenj Date: Mon Nov 15 23:50:17 1999 -0500 updated; we now restart CG every 100 iterations commit 3c3fd31018203d3be6d7458e1f5ab89d6c2944e2 Author: stevenj Date: Mon Nov 15 23:38:18 1999 -0500 Use EIGS_VERBOSE flag when run with --verbose. We should probably print Use EIGS_VERBOSE flag when run with --verbose. We should probably print even more output than we already do with this flag. commit 035cd0575b9a50529b6b115165a302cfba1c1f9f Author: stevenj Date: Mon Nov 15 23:29:55 1999 -0500 Fixed version number. commit 008c1132674d308abfb8b8ba9c809b3236328825 Author: stevenj Date: Mon Nov 15 23:28:40 1999 -0500 Added "deterministic?" and "iterations" input and output variables. commit a1ac69b355d41a9f7cadc4bdb923dd9160c344b9 Author: stevenj Date: Mon Nov 15 23:24:16 1999 -0500 Periodically print feedback in eigensolver, even when EIGS_VERBOSE is Periodically print feedback in eigensolver, even when EIGS_VERBOSE is not set, if the user is kept waiting more than a couple of seconds. Also, implement resetting of CG direction every 100 iters (determined by some experimentation with the 5x5 defect). commit aae079fce3e13819396af62c8491d50bb497d714 Author: stevenj Date: Sun Nov 14 20:29:28 1999 -0500 fixed indenting in COPYRIGHT commit 25f54ed2b028ec5a850f1d26f50afb0bbac4270a Author: stevenj Date: Sun Nov 14 20:21:26 1999 -0500 Great Renaming II: we are now MPB commit 3bf10379e7df334a72298fa233ac5ef44570189b Author: stevenj Date: Sun Nov 14 03:36:16 1999 -0500 noted mpb-discuss mailing list. commit 8d88de02f7bd27725e58b2dac3015f6742e8db29 Author: stevenj Date: Sun Nov 14 02:42:47 1999 -0500 check for -lcxml in addition to -ldxml (name changed due to acquisition by check for -lcxml in addition to -ldxml (name changed due to acquisition by Compaq). commit 6490d27a43dc3ca3c0e1f47d6166ba79aa261403 Author: stevenj Date: Sat Nov 13 00:17:43 1999 -0500 clarification: we do full vectorial calculation commit ab99e67a8d09174ca7b7595370242817feaef258 Author: stevenj Date: Sat Nov 13 00:14:31 1999 -0500 documented dielectric function computation commit f035e3090c72b8a11a1688040abbc05dc05e353e Author: stevenj Date: Fri Nov 12 23:15:17 1999 -0500 documented configure flags and env. vars. commit 4cc39a23fd8e41e90045b8853eb83a5ea129e8ef Author: stevenj Date: Fri Nov 12 23:14:23 1999 -0500 don't override INCLUDES environment variable, and use INCLUDES when don't override INCLUDES environment variable, and use INCLUDES when looking for hdf.h. commit c7bf90c1e9ad58cc6449f9125aa43c65ce181330 Author: stevenj Date: Fri Nov 12 22:32:23 1999 -0500 small clarification commit 0fca48a9e97b598376e14b23f6f2a44a719bdbe6 Author: stevenj Date: Fri Nov 12 22:30:24 1999 -0500 small fixes commit 972354a932e8b1366491a5f2f2c276dfd82855d7 Author: stevenj Date: Fri Nov 12 20:51:04 1999 -0500 updated commit e9d8fd9d20b3bf3b18d8341ca676df5ec6f11168 Author: stevenj Date: Fri Nov 12 20:46:38 1999 -0500 Removed begin-time macro (moved it to libctl). commit 886156667e33620f231feaf2aec4ad0a6263b6cd Author: stevenj Date: Fri Nov 12 19:47:29 1999 -0500 Added --without-hdf5 option (automatic when hdf5 libraries are not found). commit 2a847bbb5a75eecb292f88826ce4b78b9fc5a69a Author: stevenj Date: Fri Nov 12 08:25:10 1999 -0500 added some items commit 4cb41b1990b38e6e3af82c3ec85cd98cdceefe0f Author: stevenj Date: Fri Nov 12 08:14:01 1999 -0500 Fixed linking to ESSL on AIX. commit 21df9bb6232091ba1f63772a772ad9341d8c652f Author: stevenj Date: Fri Nov 12 06:51:11 1999 -0500 don't need to define NO_FORTRAN_FUNCTIONS here on AIX, since it's detected don't need to define NO_FORTRAN_FUNCTIONS here on AIX, since it's detected by configure. commit 6e18ed2f99fc96952c9d1d231d95a6335ef82041 Author: stevenj Date: Thu Nov 11 03:01:28 1999 -0500 Added --with-fastblas= to try linking with -l. commit 358c2185e41af11c00500d04252ee3c58bd01870 Author: stevenj Date: Thu Nov 11 02:46:43 1999 -0500 Several updates. commit 1e50554584ab261d1deb662792c9e0f61a477da0 Author: stevenj Date: Thu Nov 11 00:48:53 1999 -0500 Implemented fancy preconditioner. Also made different eigensolver Implemented fancy preconditioner. Also made different eigensolver iteration schemes into runtime flags (instead of preprocessor #ifdefs). commit 8ee84dd718e9e4fd17dbdef9bc0142f10d0cbe0a Author: stevenj Date: Wed Nov 3 23:14:56 1999 -0500 added elapsed time output commit cc03dc300393158d740a98b530aa1f5d241f5ea9 Author: stevenj Date: Mon Nov 1 22:52:13 1999 -0500 updated to reflect recent improvements commit dac88d0de855496622e3d55af82af644dcff4b47 Author: stevenj Date: Tue Oct 26 02:01:59 1999 -0400 updated change log commit 4848e7dbadf466085fa3c637b79ec193058dd093 Author: stevenj Date: Tue Oct 26 01:54:42 1999 -0400 Fixed missing tags. commit 776c7d17b4882f0888d71dc4892a50811b0e327d Author: stevenj Date: Tue Oct 26 01:44:36 1999 -0400 Tutorial revisions, mainly to reflect new mesh size. commit 0e5e7de1292473c8466e2593e5fbab5f597e7a3d Author: stevenj Date: Tue Oct 26 01:43:40 1999 -0400 Use default mesh of 3, like Fortran code. commit 273de719839e05ef26b6e512ef53c591178662a3 Author: stevenj Date: Mon Oct 25 22:06:14 1999 -0400 Wrote first-draft developer section. commit d5928c3ff3e9a8cbc2af5eb6cb81fb13a110d583 Author: stevenj Date: Mon Oct 25 22:05:55 1999 -0400 small change commit 1b270bef964adaf9da186292c82d2ef88917a23e Author: stevenj Date: Thu Oct 21 23:06:28 1999 -0400 Use new geom_fix_objects and geom_box_tree routines...the latter greatly Use new geom_fix_objects and geom_box_tree routines...the latter greatly speed up dielectric function calculation!! commit 731874501a278cb7794c372202bffd1b76a7d516 Author: stevenj Date: Wed Oct 20 23:45:54 1999 -0400 Added code to activate readline in Guile 1.3.2+. Also shuffled around Added code to activate readline in Guile 1.3.2+. Also shuffled around BLAS libraries somewhat. Try the atlas library, and stop checking for BLAS libraries after we find one. commit 5881c7a9ff2f1b53ae29c3cff7125f6127e93ffc Author: stevenj Date: Tue Oct 19 01:30:28 1999 -0400 added comments to output. commit e19be4f167ebeeeca03d71bf1fc7682dd81fd89e Author: stevenj Date: Mon Oct 18 20:25:58 1999 -0400 Added file of commands from the User Tutorial (in the manual). commit f7cc2f01dc42ee1b996b2cef2b4c704a3bd7a56d Author: stevenj Date: Thu Oct 14 00:11:28 1999 -0400 Fixed bug when gcc and/or Guile are installed in non-standard directories. commit 0b5afb48a46a0b5df34cc760a9ef72153921a604 Author: stevenj Date: Fri Oct 1 20:44:34 1999 -0400 herk routines take only *real* coefficients to multiply matrices by. commit 37ea87e3d2242361863b2790e4ec4aa1349074f8 Author: stevenj Date: Thu Sep 30 20:35:50 1999 -0400 Check NWORK size before using W[0], W[1]. commit 29f9e2981bbd6d5325e7d2449b9be2ed5058b19b Author: stevenj Date: Fri Sep 17 01:15:29 1999 -0400 DEBUG -> DEBUG_MALLOC commit 681e0de75d51a11b45134fd53ce40bb657ede139 Author: stevenj Date: Fri Sep 17 01:00:08 1999 -0400 split --enable-debug-malloc into separate flag, added --with-efence, split --enable-debug-malloc into separate flag, added --with-efence, removed a couple of Fortran library checks (should be added automatically by AC_F77_LIBRARY_LDFLAGS), and moved ordering of Guile libs. commit 96340c9c14ce9a0380b551f353f87dc5d7d37200 Author: stevenj Date: Fri Sep 17 00:09:17 1999 -0400 Changed #include to #include "path/config.h", where path is Changed #include to #include "path/config.h", where path is the appropriate relative path. This way, we can compile on the @#$#@-ing Origin, which includes a file called config.h in one of its system header directories. commit 8b0e0d83dec13fd347531f2c048957076ce949b8 Author: stevenj Date: Thu Sep 16 23:55:31 1999 -0400 Separated epsilon tensor calculation into maxwell_eps.c, and compute Separated epsilon tensor calculation into maxwell_eps.c, and compute normal vectors using separate "moment mesh." commit 3ebc3d6969673a52f3d0dea854d96aa72ccec421 Author: stevenj Date: Thu Sep 16 23:54:04 1999 -0400 Rebuild program when libraries change. commit ddd9e78a330740c389da7d725bda185772bab954 Author: stevenj Date: Thu Sep 16 23:07:33 1999 -0400 run-tm, not run. commit 8ede6ecb01db00dc96378d02090ac783bcfb4cdd Author: stevenj Date: Wed Sep 15 04:05:32 1999 -0400 Fixed library detection for SGI. commit 6784161aab4030b37091a719ceb9681d5680d590 Author: stevenj Date: Wed Sep 15 03:56:44 1999 -0400 Added more warnings. commit 664bb1144fbd95bf31dde97daff4d757ef4c17ca Author: stevenj Date: Wed Sep 15 02:35:02 1999 -0400 Got rid of warning about unused main() params. commit c1de219834f26a74a7a9f75f9eb0261c2f024ae1 Author: stevenj Date: Tue Sep 14 19:24:59 1999 -0400 Added malloctest. commit f5b411a681edb3b77d5fa53d5b9c3a57176c9a12 Author: stevenj Date: Tue Sep 14 05:15:13 1999 -0400 Noted provenance of debug_malloc and friends. commit 09eb90a0660e43d9e6f94862953b224795bd037e Author: stevenj Date: Mon Sep 13 19:45:17 1999 -0400 Fixed ack's. commit c12ebd782de68b0f86bcf63cb5438628fd251af4 Author: stevenj Date: Sun Sep 12 02:47:36 1999 -0400 compress test program a little commit 688c2c481a50a4bebee72452d200e1ec1a4028c2 Author: stevenj Date: Sun Sep 12 02:38:32 1999 -0400 Replaced m4 "dnl" comments with sh "#" comments (this means that they Replaced m4 "dnl" comments with sh "#" comments (this means that they get passed through to the configure script, but so what). commit 4e2c08a5a4c9ad92fda1e51144385e065c602506 Author: stevenj Date: Sat Sep 11 00:41:28 1999 -0400 Reverted changes (which I hadn't meant to commit)--passing args as Reverted changes (which I hadn't meant to commit)--passing args as strings doesn't help things on the $*@#$ alpha. commit 49396ce7bba3314b5114038a5f8eda0aa8135eeb Author: stevenj Date: Fri Sep 10 23:53:32 1999 -0400 added explanatory comment. commit d34f968c773a27a530f9ad6933d9afa57e122378 Author: stevenj Date: Fri Sep 10 23:52:46 1999 -0400 --program-suffix, etcetera now work. commit 4e6df570837c3f16098d0c7faa682b87258f4a7a Author: stevenj Date: Fri Sep 10 23:39:36 1999 -0400 Documented new libctl & photon installation procedure. commit 9a3cecd74afcd42faf868142cddf5ea2b9d6aa3a Author: stevenj Date: Fri Sep 10 22:12:47 1999 -0400 Added AC_PROG_INSTALL check. commit 73e34171b459d2393dbf8f5f8c282d5fc89aa161 Author: stevenj Date: Fri Sep 10 22:11:26 1999 -0400 Updated versions of autoconf files. commit 2620bd731abda735996b8e91db17886c76e7d83c Author: stevenj Date: Fri Sep 10 22:09:40 1999 -0400 Mirrored changes in libctl (which is now installed in a central location). Mirrored changes in libctl (which is now installed in a central location). Also, separated CFLAGS from -I flags (so that CFLAGS can be overridden more easily). configure script now looks for Guile, libctl. commit 571a073e761c4f98b82e0892cafbe463152c96d9 Author: stevenj Date: Thu Sep 9 19:18:21 1999 -0400 Added ChangeLog (created using rcs2log). Update in emacs with C-x v a. commit 2a28ff54a5b815a11dfa56b72a9f293da2992ef9 Author: stevenj Date: Thu Sep 9 19:07:15 1999 -0400 Mentioned contact addresses in manual. commit 0e0db4f3f6d937c6c787e1d035aa581931f7f696 Author: stevenj Date: Thu Sep 9 19:05:07 1999 -0400 Refer readers to the manual. commit 0ea1cd4b37428a51a3ac85353ef763985a3be8f4 Author: stevenj Date: Thu Sep 9 19:02:30 1999 -0400 Made changes suggested by John. In particular, we are now the "MIT Made changes suggested by John. In particular, we are now the "MIT Photonic-Bands" package. commit 84c24764636014a6886044eb18442491fd3df464 Author: stevenj Date: Thu Sep 9 02:32:47 1999 -0400 Discussed units. commit 9f3a3827c28696c08ac6799017832bfe088558d8 Author: stevenj Date: Thu Sep 9 02:11:00 1999 -0400 Made a stab at an introduction. commit cc8509ada80a6ec753308c3a6d443067889a2587 Author: stevenj Date: Wed Sep 8 23:12:05 1999 -0400 Added a couple more items. commit db3339c715de6321daee0174c70eb3b6edea08dd Author: stevenj Date: Wed Sep 8 01:35:56 1999 -0400 Added acknowledgments section. commit 55dafa0a0546642ec3134f9ed530358bed8cd28c Author: stevenj Date: Wed Sep 8 01:10:07 1999 -0400 Wrote "Field manipulation functions" section. commit 4ab3b3fd1188400f04e1fd975710e1f9f15c9fd9 Author: stevenj Date: Wed Sep 8 00:28:42 1999 -0400 put types in font commit 42ac1bead8b40444f38bd314c9a393651934164b Author: stevenj Date: Wed Sep 8 00:23:47 1999 -0400 Added output functions section. commit ccfe4f59719600ce79f32f0c5670f31a3c7e5419 Author: stevenj Date: Wed Sep 8 00:16:58 1999 -0400 Added combine-band-functions. commit 45fe61792f6c35f23284126c471d0badd3790d55 Author: stevenj Date: Tue Sep 7 23:40:04 1999 -0400 Set gap-list to '() if there are 1 or fewer k-points in the run function. commit 3808433af11b4544118286640cb9824123a761cf Author: stevenj Date: Tue Sep 7 23:32:22 1999 -0400 added more sections. commit 09d517e36d2b925e3f42ce1265af356963b45cea Author: stevenj Date: Mon Sep 6 07:26:22 1999 -0400 bug fix commit c3caa91c2c66c92cbbadfaf3beb3dcc9cc6e3399 Author: stevenj Date: Mon Sep 6 07:16:55 1999 -0400 Fixed lie. commit 01cc0601a3160ec6aa74daf8393f1df00b24b9e2 Author: stevenj Date: Mon Sep 6 07:07:06 1999 -0400 grammar fix commit a4d840a842d258a1e450a93944dde9b2bacba035 Author: stevenj Date: Mon Sep 6 07:01:04 1999 -0400 fixed another tag commit b70f87a34f06d617d54808c22cf05e9118f8274b Author: stevenj Date: Mon Sep 6 07:00:02 1999 -0400 fixed tag commit be4ab2305e468ea7cc14bcd7e7329b56f3be5eeb Author: stevenj Date: Mon Sep 6 06:58:14 1999 -0400 added another link commit cd42a961dac58249344d0cb620e65e6c00895007 Author: stevenj Date: Mon Sep 6 06:57:08 1999 -0400 small correction commit 2bbc4929de07dbb5a7dd08b7238730f1ab28a2e9 Author: stevenj Date: Mon Sep 6 06:55:51 1999 -0400 More useful additions. Started on the reference section. commit a4ef2dcbba04dfb432e4d540fdae5db51037b6b9 Author: stevenj Date: Mon Sep 6 03:18:25 1999 -0400 Split randomize-fields into a separate function; less hackery this way. commit 1ebd85e1c8699f748c6110201d76511a103ad142 Author: stevenj Date: Mon Sep 6 03:02:07 1999 -0400 Made it easier to re-run without reinitializing fields. commit 47ec6f3a1b48df68e4c023ae51d8dff08a51c07b Author: stevenj Date: Mon Sep 6 00:48:29 1999 -0400 Added mode-tuning tutorial. commit a1d87af765a0707d15319bffe22bddba6e76d566 Author: stevenj Date: Sun Sep 5 18:38:27 1999 -0400 Don't prefer vendor cc to gcc (since performance-critical code is in libs). commit 5a16bb64c5c16a4bba73e1741e8d54b2c9ff2ff7 Author: stevenj Date: Sun Sep 5 18:30:31 1999 -0400 configure now checks to see if function return value from zdotc is okay. commit ab52a82c8ed4417101df19a71fc05887a3b556dd Author: stevenj Date: Sun Sep 5 17:48:55 1999 -0400 Small fix: hdf output description now includes frequency of correct band. commit 9c6d08f8fa50dade73b806f5586ebf88d5bb8673 Author: stevenj Date: Sun Sep 5 17:37:27 1999 -0400 Implemented items on TODO list: Implemented items on TODO list: dimensions < true_rank should make grid sizes 1 in extra dimensions. Prevent sumte/sumtm/sumfrq header lines from being output when not needed (put in solve-kpoint, when called with kpoint_index == 0, instead of in init_params). Add "filename-prefix" input variable for adding a prefix to all output filenames. Prepend "k" and "b" to k-point and band indices in output filenames. Start band indices with one. commit f2e23df157bd215e5957877a783d580d752be827 Author: stevenj Date: Sun Sep 5 07:32:38 1999 -0400 another small change commit d71a649a145772415a3b4ff6c8891d4d68cff01f Author: stevenj Date: Sun Sep 5 07:27:14 1999 -0400 another small fix commit b46d82932c9e57f1961c49c66c49dce741cf52db Author: stevenj Date: Sun Sep 5 07:26:33 1999 -0400 small change commit 3994a78c212961b2069c8a91d19e3a0d53631fe0 Author: stevenj Date: Sun Sep 5 07:12:49 1999 -0400 Added point-defect example. commit f82f647a0fdec11f46ead335ee7c3dfe06552bc6 Author: stevenj Date: Sun Sep 5 07:11:32 1999 -0400 Perform center-shifting correctly now (I hope). commit cfa9e0eacb0a50a0569b79995755c715e7ecc43e Author: stevenj Date: Sun Sep 5 04:16:52 1999 -0400 Only output gaps if there is more than one k point. commit 3b658919d2de44af029daa2afca1a3331cadba22 Author: stevenj Date: Sun Sep 5 00:25:59 1999 -0400 Fixed bug for non-square lattices (G was transposed). commit 070da311544afd89850a2b72bf88212d9d0aa7ab Author: stevenj Date: Sat Sep 4 23:16:43 1999 -0400 Turned on all gcc warnings and eliminated them whereever practical. commit ee856ac696e518d73dc57408f33a927027a2a738 Author: stevenj Date: Sat Sep 4 23:16:01 1999 -0400 Added more subsections. commit ab742915480fc729c7542449b142b8f4d006cfdf Author: stevenj Date: Sat Sep 4 23:15:09 1999 -0400 updated list commit b9edac3da5416b0b4a1b36f53c0f89e17b2c5648 Author: stevenj Date: Sat Sep 4 21:24:18 1999 -0400 Shifted origin to the center of the grid (this does not affect inversion Shifted origin to the center of the grid (this does not affect inversion symmetry). commit 8e4314eb59d0c8903c312b93bc86698abb129deb Author: stevenj Date: Sat Sep 4 21:23:47 1999 -0400 Added gap-list computation. commit 7a7c8f630c7811532e990e40b48b9602ede9bd01 Author: stevenj Date: Fri Sep 3 06:30:09 1999 -0400 Slowly building the manual... commit 942609140d98e6b0222c3201a655ddd268fa70f2 Author: stevenj Date: Thu Sep 2 23:50:19 1999 -0400 Added more to the manual. commit 8d7d9909150fa8aab3119ed63aa6de82b0bac2a2 Author: stevenj Date: Thu Sep 2 23:43:06 1999 -0400 Added alias, "dielectric", for "material-type". commit daf29c1cd7dfe5738efc573080767537074ecdf5 Author: stevenj Date: Thu Sep 2 02:47:11 1999 -0400 Wrote installation section. commit b31ec94fd275ad32d414cb02c54075e1d21dee5a Author: stevenj Date: Thu Sep 2 00:44:37 1999 -0400 Added documentation outline. commit 98da195421ddae3a35487864687dd0a31da8271c Author: stevenj Date: Wed Sep 1 23:53:55 1999 -0400 revamped (run) functions; they're actually useful now. commit 179de3b8a5b9d37d8e89c4d1bb6aace8fde9fa1b Author: stevenj Date: Wed Sep 1 23:23:08 1999 -0400 Moved display_object_info to libgeom. commit f9a9201b0dbccf4927b5237a0a4abc91c4aa8251 Author: stevenj Date: Wed Sep 1 23:22:07 1999 -0400 Added dependency rule for geom.scm. commit a54b98d78158f6468983541c554bc3c555654492 Author: stevenj Date: Wed Sep 1 21:50:50 1999 -0400 Added compute-energy-in-objects, plus ability to let init-params not Added compute-energy-in-objects, plus ability to let init-params not reinitialize the fields. commit 093364ab48c5f5079ab341525178384a874c7b6b Author: stevenj Date: Wed Sep 1 05:09:07 1999 -0400 note breakage under mpi of field output. commit c1f2af34b20b66f548b4069913cd8504e9666770 Author: stevenj Date: Wed Sep 1 04:50:49 1999 -0400 Added matrixio (HDF5 output capability). commit 9c4c6431a0b570c30654ea691212ae4a64c91702 Author: stevenj Date: Tue Aug 31 23:07:51 1999 -0400 k vector is passed to maxwell function in the basis of the reciprocal k vector is passed to maxwell function in the basis of the reciprocal lattice vectors! commit 85b22c10db0632d5d23a8d844a03492cf9b62560 Author: stevenj Date: Tue Aug 31 23:07:09 1999 -0400 Compute transform with correct sign (makes a difference for field output Compute transform with correct sign (makes a difference for field output in structures lacking inversion symmetry). commit b65d66ba0150d2c0880b18f87adc1c4dfcc2f101 Author: stevenj Date: Tue Aug 31 20:41:52 1999 -0400 fixed comment. commit 2d0746a5387b9dda03d595e3169f0d4562e2dbaa Author: stevenj Date: Tue Aug 31 20:03:11 1999 -0400 Broke out E/H computations into subroutines, to prepare for HDF output Broke out E/H computations into subroutines, to prepare for HDF output and position-space calculations. commit 487077c6dd7a30d54020e848b1f7b56357c99027 Author: stevenj Date: Tue Aug 31 19:08:22 1999 -0400 Cleaned up a little, and fixed (I think?) order of linking BLAS libs. commit d13b1b517e253155c0d93b94d998fa7d8d4238ab Author: stevenj Date: Mon Aug 30 21:31:20 1999 -0400 Added a couple of examples (very half-baked at this point). commit e1ab42765aa5266862d7d7618f67daed510e96a9 Author: stevenj Date: Mon Aug 30 21:27:38 1999 -0400 Added (untested) checks for BLAS in vendor-specific libraries (which, I Added (untested) checks for BLAS in vendor-specific libraries (which, I *think*, include an optimized BLAS). commit eca4a29c021812707d98235ed9fe4c8d41b41b57 Author: stevenj Date: Mon Aug 30 20:18:03 1999 -0400 Fixed --help output to reflect fact that --enable-complex is the default. commit 1e76b807737572015aaeaf5d4453201264e60006 Author: stevenj Date: Mon Aug 30 19:47:57 1999 -0400 Print out radius for cylinders. commit a2464d48d9b65c0d4b51bc71e48ac8fe0d87a66e Author: stevenj Date: Mon Aug 30 19:09:50 1999 -0400 Allow polarization of solution to be set. commit 071a37bb445fa3be79f163878fb69958a9c2c371 Author: stevenj Date: Mon Aug 30 16:07:45 1999 -0400 removed newlines. commit c17e5c5775604d3dd54ce3c82bc007c9add8c5e2 Author: stevenj Date: Mon Aug 30 15:43:19 1999 -0400 Updated info. commit c2b03f01cdf5f1f83bacc287849e4e33f656c22d Author: stevenj Date: Mon Aug 30 15:36:12 1999 -0400 GPL-ed everything. commit 8e52b7fadbaec5e392b1fce99a0f835b1bc6dfc9 Author: stevenj Date: Mon Aug 30 15:22:30 1999 -0400 'make distclean' should remove config.status. commit 38302d15cbc4fde771d3fe8e3df4cdb95d4d41e2 Author: stevenj Date: Mon Aug 30 15:19:33 1999 -0400 Added first pass at a user interface (photon-ctl). commit ae9c69a80b519abe98f608c8c4e306a6f2f67771 Author: stevenj Date: Sat Jul 17 18:58:06 1999 -0400 Implemented num_fft_bands != num_bands. commit 41544cd11c83d33ed6a3c5ce7121ae2ea070cf4b Author: stevenj Date: Fri Jul 16 23:20:26 1999 -0400 Added in epsilon tensor initialization routine, and got rid of Added in epsilon tensor initialization routine, and got rid of eps_inv_mean[band] mess from maxwell_op since it wasn't doing any good in the preconditioner. commit e1edbea49567fd20bbe6221463b3365a3c814374 Author: stevenj Date: Thu Jun 10 23:04:23 1999 -0400 Fixed -h help string. commit 2c5b35d94c3ec53064a726aadce46e1928368d7a Author: stevenj Date: Thu Jun 10 23:02:44 1999 -0400 Checked for ASCII project optimized Pentium Pro BLAS library (libblasppro1). commit 5cd0524aed3d95b29e1af2055e5cb0b05c6d8f3d Author: stevenj Date: Sat Jun 5 01:22:20 1999 -0400 Changed maxwell output format slightly; added tolerance parameter. commit e2edd63e1d46b07a7fbc455cf9f80e1289abddc4 Author: stevenj Date: Sat Jun 5 01:06:53 1999 -0400 Whoops! TWOPI is a double, not (implicitly) and int! commit f24ee5dc2667b70b22a67d2a5845e42e93154b79 Author: stevenj Date: Sat Jun 5 00:14:43 1999 -0400 Default to quarter-wave stack. commit 956a7e85590601d59ebc26191415d2688bd9a5e2 Author: stevenj Date: Fri Jun 4 23:00:12 1999 -0400 Added code to find maxwell eigenvals "targeted" around a particular Added code to find maxwell eigenvals "targeted" around a particular frequency. The convergence is slower than I would like, though. commit db49e2716d27adf8dd59eb5eb79ca73ed0eb3629 Author: stevenj Date: Fri Jun 4 20:54:38 1999 -0400 For now, don't subtract eigenvals from the preconditioner, as least not For now, don't subtract eigenvals from the preconditioner, as least not until I understand the effects better. (Right now, seems to make convergence worse in many cases, and also seems to mess up the convergence criteria for the higher bands.) commit 832d9b3e8c10f7115442c67a2995312f12ee4ac8 Author: stevenj Date: Tue Jun 1 20:59:37 1999 -0400 Updated to work with [ds]?r?fftw libraries (aren't regular expressions Updated to work with [ds]?r?fftw libraries (aren't regular expressions wonderful?). commit 6c073f9d9d27eea157a7652d7c75012a5fd45815 Author: stevenj Date: Tue Jun 1 20:56:55 1999 -0400 Misc. changes. commit f048549fb64db8c90d8e1dc7cea7593b1cb156ff Author: stevenj Date: Tue Jun 1 20:53:19 1999 -0400 Separated op and preconditioner into their own files. commit 9369d9036ad31d1867313d2ff585aad6e3e55032 Author: stevenj Date: Thu Feb 4 02:51:18 1999 -0500 Check for k == 0 in when setting k vector. commit 5370b90b8ba7fbf42b91bddf5d2fa4e4c4d02ff7 Author: stevenj Date: Thu Feb 4 02:21:19 1999 -0500 Added stricter convergence (convergence of each eigenvalue separately). commit 9989f552fd9d965e4a20348672b93e5b662eb4e4 Author: stevenj Date: Thu Feb 4 01:26:22 1999 -0500 Small fixes. commit a28f17017355914eeb92fb4d59e9158044c25088 Author: stevenj Date: Thu Feb 4 01:23:07 1999 -0500 Allowed discrimination between TE and TM modes. commit 0d951095734f69e12f9882e7c1e6ed920af1f081 Author: stevenj Date: Wed Feb 3 22:55:15 1999 -0500 Added profiling flags to existing flags, instead of replacing. commit 3189ac73f8e23924f862ec4878f87a0e735357ea Author: stevenj Date: Wed Feb 3 22:26:54 1999 -0500 Fixed ordering of checks... commit 5360bbcc3f346024bfc231f0821d8d16a9abb95f Author: stevenj Date: Wed Feb 3 22:11:11 1999 -0500 Added --enable-prof. commit 580f102dceb2e5261b2fa3f4cb9ae489e6a49fcf Author: stevenj Date: Wed Feb 3 21:16:43 1999 -0500 Lots of changes to eigensolver routine and preconditioners, yielding Lots of changes to eigensolver routine and preconditioners, yielding dramatic improvements in convergence. The most important thing new is that we now diagonalize the subspace on each iteration of eigensolver. This makes the preconditioner much more sensible, and also allows us to subtract the eigenval from the preconditioner (a better approximation, hopefully, to the correct Hessian). commit bd9ce50a029fa73f8af80d472b54586cf6a50bcc Author: stevenj Date: Sun Jan 31 07:49:01 1999 -0500 No need to store k+G in k_data since we don't use this information. commit 7d6081bc78976add40e3c44f67699f00f72778e6 Author: stevenj Date: Sun Jan 31 07:38:50 1999 -0500 Maxwell seems like it might be working! commit bf689b5d553410e3a3431962ca3c1983675fcfa8 Author: stevenj Date: Sat Jan 30 22:17:11 1999 -0500 Made complex eigenvector output in eigs_test more uniform. commit 7d0061dd9f9795df5470bdd93df3c6e95ff30f2b Author: stevenj Date: Sat Jan 30 21:10:01 1999 -0500 Whoops! make clean should delete eigs_test.o. commit ca4355ec6eaf7098dc85e03d8ec513af5ee95c07 Author: stevenj Date: Sat Jan 30 21:09:24 1999 -0500 Removed unused lines. commit 1f99a7c42a2d76dcd53fc632ad66b1712d491943 Author: stevenj Date: Sat Jan 30 07:21:49 1999 -0500 Fixed uninitialized D bug in eigensolver.c (doh!). Added test for Fixed uninitialized D bug in eigensolver.c (doh!). Added test for maxwell operator code, and got maxwell closer to working (I hope). commit dc975f677d00c1d265ead6b73a243b00c34b4241 Author: stevenj Date: Fri Jan 29 20:52:02 1999 -0500 "Autoconfiscated" everything (i.e. adapted for use with GNU autoconf "Autoconfiscated" everything (i.e. adapted for use with GNU autoconf portability tools). commit 53638cc9addf9c4e92a724e852689e705ea54ea8 Author: stevenj Date: Fri Jan 29 05:19:16 1999 -0500 Separate scalar_complex type that is always defined. commit e484e89c5c1c44f9fab5150d50295e2d961277ee Author: stevenj Date: Fri Jan 29 05:08:29 1999 -0500 Initial version of Maxwell operator code. commit bebd3f811e67ed8f80c5a7b5819967f1d572fb54 Author: stevenj Date: Tue Aug 11 00:32:35 1998 -0400 Noted that A and C are assumed to be linear. commit f17764f753f996e78e8d7a003af44023d082c347 Author: stevenj Date: Mon Aug 10 21:59:51 1998 -0400 Added callback data pointer to eigensolver. commit b6f9e28b6ce920a59ec9dab3a45bcde43f57df89 Author: stevenj Date: Sat Aug 8 20:18:06 1998 -0400 Made sure that solving for complex eigenvectors works. (Hooray!) commit 61a3e7e12de6cfd587a17b8473a9ebb36b01c1de Author: stevenj Date: Sat Aug 8 20:17:36 1998 -0400 Worked around problems accessing Fortran function return values on Worked around problems accessing Fortran function return values on the RS/6000. commit d4ed314a14b40ca0b91543915c993a0d7dffb726 Author: stevenj Date: Sat Aug 8 09:05:44 1998 -0400 For complex scalars, create complex matrix. commit f3aeec9f80c79cbefab1a071a907e30742ddb7a2 Author: stevenj Date: Sat Aug 8 09:05:16 1998 -0400 Bug fix in ASSIGN_SCALAR for complex. commit 2215426ab128c4155d9b596584f17bd791c8c02e Author: stevenj Date: Sat Aug 8 08:42:33 1998 -0400 Columns, not rows, of Y are the eigenvectors. commit 2f3dbaf3bdbc3686135bd72373590cbad3fe6c57 Author: stevenj Date: Sat Aug 8 07:33:36 1998 -0400 Some minor cleanup in function interfaces. commit 07dffa1add24e3d83730321ee987adc55b734490 Author: stevenj Date: Sat Aug 8 07:17:53 1998 -0400 Changed confusing use of "X" in comment. commit e0455b8f189d89c270d20251b6efe458b31278d7 Author: stevenj Date: Sat Aug 8 07:14:50 1998 -0400 Noted eigensolver.c. commit 0f54f8c6b722a9131865bd50433f7a989cbb703e Author: stevenj Date: Sat Aug 8 07:11:49 1998 -0400 Updated to note eigensolvers. commit 4257856bfc7d03139e25bccb55a3676b1951d972 Author: stevenj Date: Sat Aug 8 07:08:25 1998 -0400 "Cray" is not an acronym. commit 8bcd868e882b0f4dab0f4bb30135f2d52af10668 Author: stevenj Date: Sat Aug 8 07:06:29 1998 -0400 Moved fortranize.h to util directory. commit 671eeca8d6176c3f664d8ef9e2d96b28c3905d0c Author: stevenj Date: Sat Aug 8 07:02:27 1998 -0400 Makefile for test programs. This will probably get replaced by Makefile for test programs. This will probably get replaced by something autoconf'y later, but it will do for now. commit 36e4b0eea472427971a07ea211346924bc79b87d Author: stevenj Date: Sat Aug 8 07:00:25 1998 -0400 Check for memory leaks at end. commit 0150c45582751b256e5f9c2e37f0e02c835d486e Author: stevenj Date: Sat Aug 8 06:27:19 1998 -0400 Only print out A for n <= 10 instead of 20. commit 92078eeec80b04b927c463c7b4e227a91f2cd1a1 Author: stevenj Date: Sat Aug 8 06:27:02 1998 -0400 Increased iteration limit and included it in the failure message. commit 7f9917e1c89e591df55e9c379dc5812171c07fd3 Author: stevenj Date: Sat Aug 8 06:18:56 1998 -0400 Added comparison of multiple tests (w/o CG, w/o preconditioning, etcetera). commit 4cb043e79a15046ab32346fb1b87550c5deb56e2 Author: stevenj Date: Sat Aug 8 06:18:31 1998 -0400 Added sqmatrix_copy. commit 15fae550c79ed7bdb9052c4165b7e3cf52f9fc53 Author: stevenj Date: Sat Aug 8 05:52:46 1998 -0400 Got things working. commit 8ef46e013b012cdbf5aa13652d52f7939d5749d4 Author: stevenj Date: Sat Aug 8 05:52:30 1998 -0400 Modified to enable debug_malloc/free when DEBUG is defined. Does it work? commit 249f328fb38eaddbfe9f619418305a2944310a0f Author: stevenj Date: Sat Aug 8 05:52:02 1998 -0400 Eigensolver now computes correct eigenvectors/values at the end. Eigensolver now computes correct eigenvectors/values at the end. Fixed problem with not enough memory being allocated for dense real eigensolver of small sizes (U.p < 3). commit 6d6bcfbeb818e7dec843048b1fdf60617b433bd6 Author: stevenj Date: Fri Aug 7 23:35:16 1998 -0400 Fixed missing semicolon when not using gcc. commit 576449fec350f2f1027082f21c27fe17a695a794 Author: stevenj Date: Fri Aug 7 23:23:40 1998 -0400 Added starting code. commit fc4761ecb08be7c5844569a0ce6043cfb7017d09 Author: stevenj Date: Wed May 20 02:18:50 1998 -0400 Initial revision mpb-1.5/NEWS0000644000175400001440000004674712315341255007600 00000000000000MPB 1.5 (3/28/2014) * MPB now also installs a library, for use from within Meep 1.2 or later. * Support Guile 2.x. * Support FFTW version 3.x (in addition to FFTW 2.x). Version 3.3 or later is required for MPI parallelism. * Support for OpenMP parallelism. * Use more accurate subpixel averaging algorithm for interfaces between anisotropic material (see Kottke et al, PRE 77, 036611, 2008). * Use more accurate geometry routines in recent libctl versions (improves and speeds subpixel averaging). * Support using a different k origin in find-k. * Added epsilon-func wrapper for material-func (similar to Meep). * Added compute-1-group-velocity to compute group velocity of a single band. * Added kinterpolate-uniform function, to interpolate with roughly uniform spacing in reciprocal space. * Added optimize-grid-size! function to round the grid size to a size that can be handled more efficiently. (Only affects resolution, not lattice vectors.) * Allow user to set filename-prefix to false to disable its use. * Added mpb-data -P option to change the phase angle of the output. * Added compute-field-divergence and routines to get and output the bound charge density: get-charge-density and output-charge-density. * resolution is now an arbitrary real number, not just an integer, although of course MPB eventually computes an integer grid size. * Support HDF5 1.8. * Fix recurring "non positive-definite matrix in potrf" errors that were arising due to roundoff errors preventing matrix inversion. * Fix output-at-kpoint to avoid sensitivity to roundoff errors. * Bug fix in parallel HDF5 support: HDF5 compiled for parallel I/O (MPI) now works. * Bug fix in field-map!, thanks to Karen Lee for the bug report. * Bug fix for first-brillouin-zone-k, thanks to Mischa Megens. * Bug fix: get-field and compute-field-integral now use fields with the same phase as the outputted fields. Thanks to Jim West for the bug report. * Miscellaneous bug fixes. MPB 1.4.2 (3/3/2003) * Interactive prompt is now "mpb>" not "guile>". * Output "freqs:" line lists headings as "k1, k2, k3" instead of "kx, ky, kz" since they are in reciprocal-lattice, not cartesian, coordinates. Thanks to Theis Peter Hanson for the suggestion. * Bug fix in find-k for non-orthogonal lattices; thanks to Suxia (Susan) Yang for tracking down this bug. * Fixed SunOS problem where k vectors along no-size dimensions failed; thanks to Benjamin Cowan for the bug report. * Fixed find-k to work for band-min > 1; thanks to M. Povinelli for the bug report. * Fixed find-k to work for thunk band functions (which take no arguments and are called only once instead of per-band). MPB 1.4.1 (9/16/2002) * Fixed NaN in field normalization when basis determinant was negative. Thanks to Rumen Iliew for the bug report. * Fixed compatibility problems with versions of Guile prior to 1.4. Thanks to Cazimir G. Bostan for bug reports. * Don't resize lattice basis for grid-size == 1 unless no-size was explicitly specified; thanks to Tairan Wang for the suggestion. MPB 1.4 (9/12/2002) * New find-k routine to find k as a function of frequency, instead of vice-versa. * The Great Field Renormalization: all fields are now normalized to have unit *integral* of their energy density (instead of unit sum over the grid points), which is much more useful e.g. for perturbation theory. (See field normalization section of manual.) * You can now save fields in Scheme variables to perform computations combining different fields. Example routines, e.g. to output the Poynting vector, are included. * Functions to export (and import) the raw eigenvectors (planewave amplitudes), as well as to compute dot products of eigenvectors from different k-points (e.g. for detecting band crossings). * allow-negative-epsilon function to enable negative-dielectric support. * Added examples/dos.scm to compute density of states via simple Gaussian histogram, suggested by Xavier Gonze and Doug Allan. * Bug fix: allow real offdiagonal epsilon elements without requiring --with-hermitian-eps. Thanks to Doug Allan for the bug report. * Eliminated floating-point error on Alpha for homogeneous structure. Thanks to F. Lopez-Tejeira for the bug report. * Added man page for mpb-split. * Minor installation fixes. MPB 1.3 (3/10/2002) * You can now specify the grid size via the resolution input variable, instead of via grid-size. In this case, you make e.g. a 2d simulation by creating a lattice with size no-size in one dimension. The old syntax is still supported, but the new style is encouraged (all examples have been updated to the new style). * New functions to retrieve fields, dielectric functions, etcetera at any point, interpolated from the grid if necessary; see the get-*-point functions in the reference section. * New compute-field-integral function, analogous to compute-energy-integral; thanks to Marin Soljacic for the suggestion. * Support Scheme complex numbers where appropriate (e.g. in epsilon-offdiag or in the new field integration functions). * Got rid of NaN when computing the (undefined) group velocity for zero-frequency states at the Gamma point; arbitrarily return zero here instead. Thanks to Dmitry N. Chigrin for reporting floating-point exceptions on Alphas. * Fixed compilation failure for Fortran compilers that use all upper case; thanks to Steve Lantz of Cornell. * Added "Fun with Fortran" section to installation manual describing common Fortran pitfalls; thanks to Steve Lantz for the suggestion. * Improved BLAS/LAPACK detection; new --with-blas and --with-lapack options to specify these libraries manually. * Shortened --with-hermitian-epsilon configure option to --with-hermitian-eps. * The data-analysis tutorial is now consistent with h5topng 1.7. * Use new API from libctl 2.0. MPB 1.2.2 (12/7/2001) * Fixed bug that caused erroneous/failed convergence when EVEN-Y/ODD-Y constraints were used in three dimensions. Thanks to Rumen Iliew for the bug report. * Added convenience functions run-yeven, run-yodd, run-yeven-zeven, ... MPB 1.2.1 (11/20/2001) * Fixed serious crashing bug in 1.2; thanks to Karl Koch for the bug report. MPB 1.2 (11/15/2001) * Added new y-parity computation and constraints. See the new run-parity function, which allows you to simultaneously specify the parity through the y=0 and z=0 planes, for symmetric structures. See also the display-yparities function. * z parity is no longer computed by default; see the new display-yparities and display-zparities functions to pass to (run). * Return more-accurate average epsilon, fill factor, and scalar epsilon values (eigenfrequencies are not affected). Thanks to Mischa Megens for bugging me. * Now outputs D and H in consistent units (previously, D was multiplied by a factor of -frequency). Thanks to Michelle Povinelli for worrying. * epsilon.h5 file now includes extra datasets for all components of the effective dielectric tensor. (This feature is not yet supported if you configure --with-inv-symmetry --with-hermitian-epsilon.) * run-polarization is replaced by run-parity, and run-even/run-odd are deprecated in favor of run-zeven/run-zodd. run-te/run-tm are now equivalent to run-zeven/run-zodd when invoked for 3d systems. * Noted new basis-size property of geometry-lattice, from libctl 1.5. This makes it easier to use conventional units in the fcc lattice. * Group-velocity computation no longer silently invalidates fields that have been loaded with get-dfield, etcetera. Thanks to Marin Soljacic for the bug report. * The configure script now checks that guile is in the $PATH. Thanks to Bing Li and Giridhar Malalahalli for their bug reports. * Rotated the W and K points of the diamond-lattice example so that they are oriented similarly to those in the Photonic Crystals book by Joannopoulos et al. (eigenfrequencies are not affected). Thanks to Robert Sheldon for pointing out that this was confusing. * Added honey-rods.ctl example file: a 2d honeycomb lattice of rods. * Added line-defect.ctl example file: a line-defect waveguide in a 2d triangular lattice of dielectric rods, formed by a missing row of rods. MPB 1.1.1 (7/4/2001) * Fixed bug in H-field output that caused subtly incorrect H-field files (only) for 3d problems when NOT using mpbi. * Fixed bug that caused mpbi to output incorrect results for 1d problems (e.g. outputted dielectric functions with zeros). * Changed default eigensolver tolerance from 1e-4 to 1e-7. * Added retrieve-gap convenience function to return the gap between two specified bands. * Fixed typo that prevented compilation of MPI (parallel) version. * C compiler flags -O3 are no longer used by default, since they don't work with some compilers; most of the performance depends upon the BLAS and FFTW anyway. (Users wishing greater optimization can set the CFLAGS environment variable.) Thanks to Giridhar Malalahalli for the bug report. MPB 1.1 (5/6/2001) * Added compute-energy-integral function to make it easier to compute arbitrary field-energy integrals for perturbation theory; thanks to Marin Soljacic for the suggestion. * Fixed bug in output-field routines for the case of a nonzero kz component, that caused the fields to be multiplied by an exp(ikx) phase with a k in the wrong direction. Thanks to Jesper Riishede for the bug report. MPB 1.0 (2/23/2001) * At long last, support for distributed-memory parallel machines with MPI. The computation time (and memory usage) can often improve nearly linearly with the number of processors. Thanks to Clarendon Photonics for funding this work. * Also added mpb-split script to parallelize in a simpler way, without MPI, on e.g. SMP machines, by dividing up the list of k-points among a number of serial mpb processes. * Fixed bug in mpbi where artifacts could be introduced in 3d field and dielectric-function output files. (This only affected the output files, not the frequency eigenvalues, etcetera.) Thanks to Michelle Povinelli for the bug report. * Added new material-function material type, so that you can now specify that the dielectric tensor be an arbitrary function of position. Thanks to Peter Bermel for needing this. * If MPB is configured with the flag --with-hermitian-epsilon, then complex-hermitian dielectric tensors (corresponding to magnetic materials, which break time-reversal symmetry) are supported. Thanks to Shanhui Fan for pestering me about this. * Eliminated output-copies input variable; if you want to visualize multiple unit cells, you should use mpb-data. * Added new "nothing" material that punches a hole through other objects to the background. (This is distinct from default-material when epsilon-input-file is used, or for compute-energy-in-objects.) * Fixed inability of MPB 0.13 to run under an old version (1.2) of Guile. * Now gives an error if k-point or dielectric tensor is incompatible with run-te/run-tm, or if the dielectric tensor is not positive-definite. * Default to vendor cc instead of gcc, so that C and Fortran compilers are in sync. (We default to the vendor f77 because it was probably used to compile LAPACK/BLAS, and Fortran libraries are picky.) * The manual now cites our recent publication on the methods behind MPB. * Bug fix in compute-energy-in-object-list for non-orthogonal lattices. * Bug fix in combine-band-functions and other functions of band functions, which did not handle functions of no arguments ("thunks") correctly (crashing with an error message). Thanks to Michelle Povinelli for the bug report. * Fixed a floating-point sensitivity bug in mpb-data that could cause a crash on the Alpha; thanks to Dominique Caron for the bug report and debugging information. MPB 0.13 (1/7/2001) * Can now take advantage of inversion symmetry in the geometry, gaining at least a factor of two in speed and a factor of two in memory. To use this, you configure MPB with --with-inv-symmetry; the resulting executable is installed as "mpbi" and only supports inversion symmetry, so you will usually want to install the ordinary MPB as well. * Added new eigensolver-block-size input variable, so that MPB can optionally solve for only a few bands at a time instead of all at once, reducing memory requirements and often increasing speed. * Improved handling of the singular (zero-frequency) solutions at the Gamma (k=0) point. This k point should no longer converge slowly (or cause additional problems in the targeted eigensolver). * Manual updates: please see new referencing suggestions; expanded table of contents; we now use more conventional units in diamond/fcc example. * You can now pass a "thunk" (function of no arguments) to run, and it will be evaluated once per k-point (instead of once per band per k-point as for ordinary band functions). * compute-field-energy function now also returns the fraction of the energy in the various field components. Thanks to Karl Koch for the suggestion. * The filename-prefix variable is now read each time an output function is called, instead of once per (run), so it can be changed frequently if desired. Thanks to Karl Koch for the suggestion. * Added first-brillouin-zone function to transform an arbitrary k-point into an equivalent point in the first Brillouin zone. Thanks to Payam Rabiei for the suggestion. * In mpb-data, the center of the output cell is now always identical to the origin of the coordinate system. Thanks to Michelle Povinelli for pointing out this deficiency. * Used improved spherical-quadrature formula in computing the effective dielectric tensor in 3d; this should increase accuracy somewhat at lower grid resolutions. Thanks to Doug Allan for helpful discussions. MPB 0.12 (7/9/2000) * Added fix-*field-phase functions to allow a deterministic phase in the output fields, thanks to a suggestion by Doug Allan. * Added group-velocity calculation functions (display-group-velocities, etcetera). * Added -e x,y,z option to mpb-data so that you can now specify an orientation of the output cell (e.g. to make the first axis the 111 direction of an fcc crystal). * Added (index n) substitute for epsilon property of dielectrics, equivalent to (epsilon (* n n)). * Documented new libgeom features: cone geometric object, coordinate conversion functions (reciprocal->lattice, lattice->cartesian, etc.), and vector/matrix rotation. * compute-field-energy now returns the total, unnormalized energy in the corresponding field; combined with compute-energy-in-objects, this makes it easy to do some perturbation theory and related calculations. * Eigensolver improvements. Periodic reorthogonalization and renormalization to combat some numerical problems. New line-minimization code, included with permission from MINPACK-2 by Jorge More. * Fixed breaking of 90-degree rotational symmetry-breaking by the mesh in 2d; thanks to Jim West and Doug Allan of Corning for the bug report. (In general, some symmetry-breaking by the discretization seems hard to avoid, however.) * Fixed bug in field output routines that could cause crashes for grid sizes not a multiple of 4. * Bug fix in dielectric function construction for 2d systems: we now use the xy plane at z=0 as documented, instead of z=-0.5. MPB 0.11 (2/12/2000) * configure script can now detect and link ATLAS 3.0 accelerated BLAS. * Added band-range-data output variable. * Running mpb-data multiple times on the same file now replaces the results of the previous run, instead of appending -new2, -new3, etcetera. * Fixed bug in run-even/run-odd that could seriously slow or even prevent eigensolver convergence. Thanks to Payam Rabiei for the bug report. * Fixed compilation --without-hdf5, or when HDF5 is not found. Thanks to Rajesh Rengarajan for the bug report. MPB 0.10 (1/28/2000) * Added mpb-data utility for post-processing data (e.g. for unskewing non-orthogonal lattices). See the data analysis tutorial or man mpb-data for more information. * Added new data analysis tutorial to the manual, describing how to analyze and visualize the results of two sample calculations. * Added support for a new material type, dielectric-anisotropic, so that you can specify arbitrary real/symmetric dielectric tensors. * Added new output-at-kpoint function to make it easier to output fields only at a single k-point in a band-structure calculation. * When outputting fields, output all field components (x, y, z, and real and imaginary parts) to a single HDF5 file. Also include info on the lattice and k-point vectors to facilitate post-processing. * Added new subsection to the installation manual describing some generic installation path issues on Unix that were confusing people. * Use CPPFLAGS environment variable instead of the less-standard INCLUDES to pass -I flags to the configure script (for header files in non-standard locations). * Added diamond.ctl example file for a 3d diamond (fcc) lattice of spheres. * Added (brief) mpb man page. * Fixed z-parity output and run-even/odd functions for 2d grids. * Fixed bug in output-dpwr-in-objects. Thanks to Mihai Ibanescu for the bug report. * Compilation fixes. We need to set SHELL in the Makefile for make on some systems. Also added rule to insure ctl-io.h is created before main.c is compiled. Thanks to Christoph Becher for the bug reports. MPB 0.9.1 (1/7/2000) * Fixed eigensolver bug where special handling of Gamma (k=0) point could screw up convergence for subsequent k-points, causing incorrect results. * Fixed behavior of filename-prefix input variable; thanks to Karl Koch for the bug report. MPB 0.9 (1/2/2000) * Added run-even and run-odd functions, so you can now compute only even/odd states (with respect to a z=0 mirror plane) in systems with sufficient symmetry. See also the new z-parity output variable. * Added epsilon-input-file variable, so that you can now read an arbitrary dielectric function from a file. * Field file names now include the polarization (e.g. ".tm"). * Some optimizations in the eigensolver. * Some documentation improvements; thanks to Edmond Chow for his comments. * configure should work even when there is no Fortran compiler on your system (assuming your BLAS, etc., libraries work without Fortran libs). Thanks to Antti Renko for the bug report. * Fixed problems detecting BLAS and LAPACK shared libraries in configure. Thanks to Karri Varris for the bug report. * Fixed trailing spaces in sed command, which were breaking 'make install' on some systems. Thanks to Ron Chase for the bug report. MPB 0.8.1 (11/22/1999) * Added output-hfield-x, output-dfield-y, etcetera, functions for outputting only specific field components (see manual reference section). * Sped up HDF5 field output routines. * Added output-copies variable to set the number of periods output by the band output functions (see manual reference section). MPB 0.8 (11/19/1999) * Initial public release. mpb-1.5/COPYING0000644000175400001440000004310512315324032010107 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. mpb-1.5/configure0000755000175400001440000252364412315337032011004 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for mpb 1.5. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: stevenj@alum.mit.edu about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='mpb' PACKAGE_TARNAME='mpb' PACKAGE_VERSION='1.5' PACKAGE_STRING='mpb 1.5' PACKAGE_BUGREPORT='stevenj@alum.mit.edu' PACKAGE_URL='' ac_unique_file="src/matrices/matrices.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS MPB_SUFFIX SH_JOB EIGS_FLAGS_SCM NLOPT_LIB CTL_H_CPPFLAG GEN_CTL_IO LIBCTL_DIR ACTIVATE_READLINE GUILE_CONFIG guile_ok MPI_FALSE MPI_TRUE MPILIBS MPICC LAPACK_LIBS BLAS_LIBS FLIBS SCALAR_TYPE ac_ct_F77 FFLAGS F77 MPB_VERSION CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL SHARED_VERSION_INFO AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_silent_rules enable_shared enable_static with_pic enable_fast_install enable_dependency_tracking with_gnu_ld with_sysroot enable_libtool_lock enable_single enable_long_double enable_debug enable_debug_malloc enable_prof enable_checks enable_kottke with_inv_symmetry with_hermitian_eps with_efence with_mpi with_fftw2 with_openmp with_blas with_lapack with_hdf5 with_libctl ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP F77 FFLAGS MPICC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures mpb 1.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/mpb] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of mpb 1.5:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --enable-single compile for single precision --enable-long-double compile for long-double precision --enable-debug compile for debugging --enable-debug-malloc use debug malloc/free --enable-prof compile for profiling --disable-checks disable runtime checks --disable-kottke disable new anisotropic smoothing based on Kottke algorithm Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-inv-symmetry take advantage of (and require) inv. sym. --with-hermitian-eps allow complex-Hermitian dielectric tensors --with-efence use ElectricFence library --with-mpi enable MPI parallelization --with-fftw2 prefer FFTW2 to FFTW3 --with-openmp enable OpenMP parallelization --with-blas= use BLAS library --with-lapack= use LAPACK library --without-hdf5 do not use HDF5 output --with-libctl= specify libctl directory Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags MPICC MPI C compiler command Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF mpb configure 1.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_f77_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_compile # ac_fn_f77_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to stevenj@alum.mit.edu ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by mpb $as_me 1.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h src/mpbconf.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Shared-library version number; indicates api compatibility, and is # not the same as the "public" version number. (Don't worry about this # except for public releases.) SHARED_VERSION_INFO="0:0:0" am__api_version='1.14' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='mpb' VERSION='1.5' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: ########################################################################### MPB_VERSION=$PACKAGE_VERSION ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 $as_echo "$F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 $as_echo "$ac_ct_F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } if ${ac_cv_f77_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 $as_echo "$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 $as_echo_n "checking whether $F77 accepts -g... " >&6; } if ${ac_cv_prog_f77_g+:} false; then : $as_echo_n "(cached) " >&6 else FFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_g=yes else ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 $as_echo "$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no inherit_rpath_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds reload_flag_F77=$reload_flag reload_cmds_F77=$reload_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` GCC=$G77 if test -n "$compiler"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } GCC_F77="$G77" LD_F77="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if ${lt_cv_prog_compiler_pic_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; } if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_F77= always_export_symbols_F77=no archive_cmds_F77= archive_expsym_cmds_F77= compiler_needs_object_F77=no enable_shared_with_static_runtimes_F77=no export_dynamic_flag_spec_F77= export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_F77=no hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported inherit_rpath_F77=no link_all_deplibs_F77=unknown module_cmds_F77= module_expsym_cmds_F77= old_archive_from_new_cmds_F77= old_archive_from_expsyms_cmds_F77= thread_safe_flag_spec_F77= whole_archive_flag_spec_F77= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' export_dynamic_flag_spec_F77='${wl}--export-all-symbols' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_F77='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; haiku*) archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_F77=yes ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_F77= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes file_list_spec_F77='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_F77='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_F77='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' fi archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes file_list_spec_F77='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, F77)='true' enable_shared_with_static_runtimes_F77=yes exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_F77='chmod 644 $oldlib' postlink_cmds_F77='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_F77=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_F77=yes else whole_archive_flag_spec_F77='' fi link_all_deplibs_F77=yes allow_undefined_flag_F77="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: inherit_rpath_F77=yes link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no hardcode_direct_absolute_F77=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi archive_cmds_need_lc_F77='no' hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-R,$libdir' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_F77='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5 $as_echo "$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no with_gnu_ld_F77=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_F77+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_F77=no else lt_cv_archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_F77" >&6; } archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77 ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || test -n "$runpath_var_F77" || test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5 $as_echo "$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink || test "$inherit_rpath_F77" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Get C compiler. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vendor cc to be used instead of gcc" >&5 $as_echo_n "checking for vendor cc to be used instead of gcc... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } for ac_prog in cc xlc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done # prefer vendor cc, to stay in sync with Fortran ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Check whether --enable-single was given. if test "${enable_single+set}" = set; then : enableval=$enable_single; enable_single=$enableval else enable_single=no fi if test "$enable_single" = "yes"; then $as_echo "#define SCALAR_SINGLE_PREC 1" >>confdefs.h echo "*********************** SINGLE PRECISION ***********************" fi # Check whether --enable-long-double was given. if test "${enable_long_double+set}" = set; then : enableval=$enable_long_double; enable_long_double=$enableval else enable_long_double=no fi if test "$enable_long_double" = "yes"; then $as_echo "#define SCALAR_LONG_DOUBLE_PREC 1" >>confdefs.h echo "****************** LONG-DOUBLE PRECISION ***********************" fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; ok=$enableval else ok=no fi if test "$ok" = "yes"; then CFLAGS="-g" $as_echo "#define DEBUG 1" >>confdefs.h fi # Check whether --enable-debug-malloc was given. if test "${enable_debug_malloc+set}" = set; then : enableval=$enable_debug_malloc; ok=$enableval else ok=no fi if test "$ok" = "yes"; then $as_echo "#define DEBUG_MALLOC 1" >>confdefs.h fi # Check whether --enable-prof was given. if test "${enable_prof+set}" = set; then : enableval=$enable_prof; ok=$enableval else ok=no fi if test "$ok" = "yes"; then CFLAGS="$CFLAGS -pg" $as_echo "#define ENABLE_PROF 1" >>confdefs.h fi # Check whether --enable-checks was given. if test "${enable_checks+set}" = set; then : enableval=$enable_checks; ok=$enableval else ok=yes fi if test "$ok" = "no"; then $as_echo "#define CHECK_DISABLE 1" >>confdefs.h fi # Check whether --enable-kottke was given. if test "${enable_kottke+set}" = set; then : enableval=$enable_kottke; ok=$enableval else ok=yes fi if test "$ok" = "yes"; then $as_echo "#define KOTTKE 1" >>confdefs.h fi # Check whether --with-inv-symmetry was given. if test "${with_inv_symmetry+set}" = set; then : withval=$with_inv_symmetry; inv_sym=$withval else inv_sym=no fi if test "$inv_sym" = "no"; then $as_echo "#define SCALAR_COMPLEX 1" >>confdefs.h SCALAR_TYPE=complex else SCALAR_TYPE=real # Make installed program mpbi instead of mpb, but don't change mpb-data MPB_SUFFIX="i" echo "*********************** INVERSION SYM. ***********************" fi # Check whether --with-hermitian-eps was given. if test "${with_hermitian_eps+set}" = set; then : withval=$with_hermitian_eps; hermitian_epsilon=$withval else hermitian_epsilon=no fi if test "$hermitian_epsilon" = "yes"; then $as_echo "#define WITH_HERMITIAN_EPSILON 1" >>confdefs.h echo "*********************** HERMITIAN EPS. ***********************" fi # Add lots of compiler warnings to check for if we are using gcc: # (The variable $GCC is set to "yes" by AC_PROG_CC if we are using gcc.) if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -Wall -W -Wbad-function-cast -Wcast-qual -Wpointer-arith -Wcast-align -pedantic" fi ############################################################################## # Checks for libraries: ############################################################################## # Check whether --with-efence was given. if test "${with_efence+set}" = set; then : withval=$with_efence; ok=$withval else ok=no fi if test "$ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for malloc in -lefence" >&5 $as_echo_n "checking for malloc in -lefence... " >&6; } if ${ac_cv_lib_efence_malloc+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lefence $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char malloc (); int main () { return malloc (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_efence_malloc=yes else ac_cv_lib_efence_malloc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_efence_malloc" >&5 $as_echo "$ac_cv_lib_efence_malloc" >&6; } if test "x$ac_cv_lib_efence_malloc" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBEFENCE 1 _ACEOF LIBS="-lefence $LIBS" fi fi ############################################################################## { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 $as_echo_n "checking for sqrt in -lm... " >&6; } if ${ac_cv_lib_m_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_sqrt=yes else ac_cv_lib_m_sqrt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 $as_echo "$ac_cv_lib_m_sqrt" >&6; } if test "x$ac_cv_lib_m_sqrt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi # If we have a Fortran compiler, link to its libraries, since these # are probably needed to link with the BLAS/LAPACK libraries. if test x != x"$F77"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 $as_echo_n "checking how to get verbose linking output from $F77... " >&6; } if ${ac_cv_prog_f77_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 $as_echo "$ac_cv_prog_f77_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 $as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } if ${ac_cv_f77_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) case $host_os in *cygwin*) ;; *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 $as_echo "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran 77 libraries... " >&6; } if ${ac_cv_f77_dummy_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=none else ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_f77_dm_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 $as_echo "$ac_cv_f77_dummy_main" >&6; } F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then : if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then $as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 $as_echo_n "checking for Fortran 77 name-mangling scheme... " >&6; } if ${ac_cv_f77_mangling+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 $as_echo "$ac_cv_f77_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 $as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi ############################################################################## # In principle, we should abort if some of the following libraries are # missing, or perhaps only compile some of the subdirectories. For now, # though, we do nothing (and wait for the compilation errors). ############################################################################## # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; with_mpi=$withval else with_mpi=no fi # Check whether --with-fftw2 was given. if test "${with_fftw2+set}" = set; then : withval=$with_fftw2; with_fftw2=$withval else with_fftw2=no fi # Check for FFTW libraries fftw3_func=execute test "x$with_fftw2" = xyes && fftw3_func=notarealfunction # prefer FFTW2 if test "$enable_single" = "yes"; then as_ac_Lib=`$as_echo "ac_cv_lib_fftw3f_fftwf_$fftw3_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwf_$fftw3_func in -lfftw3f" >&5 $as_echo_n "checking for fftwf_$fftw3_func in -lfftw3f... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3f $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwf_$fftw3_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwf_$fftw3_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3F 1 _ACEOF LIBS="-lfftw3f $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw in -lsfftw" >&5 $as_echo_n "checking for fftw in -lsfftw... " >&6; } if ${ac_cv_lib_sfftw_fftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sfftw_fftw=yes else ac_cv_lib_sfftw_fftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sfftw_fftw" >&5 $as_echo "$ac_cv_lib_sfftw_fftw" >&6; } if test "x$ac_cv_lib_sfftw_fftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSFFTW 1 _ACEOF LIBS="-lsfftw $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftw in -lsrfftw" >&5 $as_echo_n "checking for rfftw in -lsrfftw... " >&6; } if ${ac_cv_lib_srfftw_rfftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsrfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_srfftw_rfftw=yes else ac_cv_lib_srfftw_rfftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_srfftw_rfftw" >&5 $as_echo "$ac_cv_lib_srfftw_rfftw" >&6; } if test "x$ac_cv_lib_srfftw_rfftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSRFFTW 1 _ACEOF LIBS="-lsrfftw $LIBS" fi fi fi elif test "$enable_long_double" = "yes"; then as_ac_Lib=`$as_echo "ac_cv_lib_fftw3l_fftwl_$fftw3_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwl_$fftw3_func in -lfftw3l" >&5 $as_echo_n "checking for fftwl_$fftw3_func in -lfftw3l... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3l $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwl_$fftw3_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwl_$fftw3_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3L 1 _ACEOF LIBS="-lfftw3l $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw in -lxfftw" >&5 $as_echo_n "checking for fftw in -lxfftw... " >&6; } if ${ac_cv_lib_xfftw_fftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xfftw_fftw=yes else ac_cv_lib_xfftw_fftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xfftw_fftw" >&5 $as_echo "$ac_cv_lib_xfftw_fftw" >&6; } if test "x$ac_cv_lib_xfftw_fftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXFFTW 1 _ACEOF LIBS="-lxfftw $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftw in -lxrfftw" >&5 $as_echo_n "checking for rfftw in -lxrfftw... " >&6; } if ${ac_cv_lib_xrfftw_rfftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxrfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xrfftw_rfftw=yes else ac_cv_lib_xrfftw_rfftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xrfftw_rfftw" >&5 $as_echo "$ac_cv_lib_xrfftw_rfftw" >&6; } if test "x$ac_cv_lib_xrfftw_rfftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXRFFTW 1 _ACEOF LIBS="-lxrfftw $LIBS" fi fi fi else as_ac_Lib=`$as_echo "ac_cv_lib_fftw3_fftw_$fftw3_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_$fftw3_func in -lfftw3" >&5 $as_echo_n "checking for fftw_$fftw3_func in -lfftw3... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw_$fftw3_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw_$fftw3_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3 1 _ACEOF LIBS="-lfftw3 $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw in -ldfftw" >&5 $as_echo_n "checking for fftw in -ldfftw... " >&6; } if ${ac_cv_lib_dfftw_fftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dfftw_fftw=yes else ac_cv_lib_dfftw_fftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dfftw_fftw" >&5 $as_echo "$ac_cv_lib_dfftw_fftw" >&6; } if test "x$ac_cv_lib_dfftw_fftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDFFTW 1 _ACEOF LIBS="-ldfftw $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftw in -ldrfftw" >&5 $as_echo_n "checking for rfftw in -ldrfftw... " >&6; } if ${ac_cv_lib_drfftw_rfftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldrfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_drfftw_rfftw=yes else ac_cv_lib_drfftw_rfftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_drfftw_rfftw" >&5 $as_echo "$ac_cv_lib_drfftw_rfftw" >&6; } if test "x$ac_cv_lib_drfftw_rfftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDRFFTW 1 _ACEOF LIBS="-ldrfftw $LIBS" fi fi fi fi if test x = x"`echo $LIBS | egrep 'l[dsx]fftw|fftw3'`"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw in -lfftw" >&5 $as_echo_n "checking for fftw in -lfftw... " >&6; } if ${ac_cv_lib_fftw_fftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fftw_fftw=yes else ac_cv_lib_fftw_fftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw_fftw" >&5 $as_echo "$ac_cv_lib_fftw_fftw" >&6; } if test "x$ac_cv_lib_fftw_fftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW 1 _ACEOF LIBS="-lfftw $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftw in -lrfftw" >&5 $as_echo_n "checking for rfftw in -lrfftw... " >&6; } if ${ac_cv_lib_rfftw_rfftw+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrfftw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftw (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftw (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rfftw_rfftw=yes else ac_cv_lib_rfftw_rfftw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rfftw_rfftw" >&5 $as_echo "$ac_cv_lib_rfftw_rfftw" >&6; } if test "x$ac_cv_lib_rfftw_rfftw" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRFFTW 1 _ACEOF LIBS="-lrfftw $LIBS" fi fi fi if test x = x"`echo $LIBS | egrep 'l[dsx]*fftw'`"; then as_fn_error $? "The FFTW libraries could not be found. Make sure FFTW is installed, and that LDFLAGS and CPPFLAGS are set appropriately if necessary." "$LINENO" 5 fi if test x"$inv_sym" = xyes; then if test x = x"`echo $LIBS | egrep 'l[dsx]*rfftw|lfftw3'`"; then as_fn_error $? "The FFTW3 or RFFTW libraries, which are required to compile MPB with inversion symmetry, could not be found. These should have been installed as a part of FFTW." "$LINENO" 5 fi fi ############################################################################## # Check for OpenMP libraries # Check whether --with-openmp was given. if test "${with_openmp+set}" = set; then : withval=$with_openmp; with_omp=$withval else with_omp=no fi if test "x$with_omp" = xyes; then $as_echo "#define USE_OPENMP 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C compiler" >&5 $as_echo_n "checking for OpenMP flag of C compiler... " >&6; } if ${ax_cv_c_openmp+:} false; then : $as_echo_n "(cached) " >&6 else saveCFLAGS=$CFLAGS ax_cv_c_openmp=unknown # Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI), # -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none" if test "x$OPENMP_CFLAGS" != x; then ax_openmp_flags="$OPENMP_CFLAGS $ax_openmp_flags" fi for ax_openmp_flag in $ax_openmp_flags; do case $ax_openmp_flag in none) CFLAGS=$saveC ;; *) CFLAGS="$saveCFLAGS $ax_openmp_flag" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char omp_set_num_threads (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return omp_set_num_threads (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_c_openmp=$ax_openmp_flag; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done CFLAGS=$saveCFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_openmp" >&5 $as_echo "$ax_cv_c_openmp" >&6; } if test "x$ax_cv_c_openmp" = "xunknown"; then as_fn_error $? "Could not find OpenMP flag; configure with --without-openmp" "$LINENO" 5 else if test "x$ax_cv_c_openmp" != "xnone"; then OPENMP_CFLAGS=$ax_cv_c_openmp fi $as_echo "#define HAVE_OPENMP 1" >>confdefs.h fi CFLAGS="$CFLAGS $OPENMP_CFLAGS" fftw_omp=yes if test "$enable_single" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwf_init_threads in -lfftw3f_omp" >&5 $as_echo_n "checking for fftwf_init_threads in -lfftw3f_omp... " >&6; } if ${ac_cv_lib_fftw3f_omp_fftwf_init_threads+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3f_omp $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwf_init_threads (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwf_init_threads (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fftw3f_omp_fftwf_init_threads=yes else ac_cv_lib_fftw3f_omp_fftwf_init_threads=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3f_omp_fftwf_init_threads" >&5 $as_echo "$ac_cv_lib_fftw3f_omp_fftwf_init_threads" >&6; } if test "x$ac_cv_lib_fftw3f_omp_fftwf_init_threads" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3F_OMP 1 _ACEOF LIBS="-lfftw3f_omp $LIBS" else fftw_omp=no fi elif test "$enable_long_double" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwl_init_threads in -lfftw3l_omp" >&5 $as_echo_n "checking for fftwl_init_threads in -lfftw3l_omp... " >&6; } if ${ac_cv_lib_fftw3l_omp_fftwl_init_threads+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3l_omp $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwl_init_threads (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwl_init_threads (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fftw3l_omp_fftwl_init_threads=yes else ac_cv_lib_fftw3l_omp_fftwl_init_threads=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3l_omp_fftwl_init_threads" >&5 $as_echo "$ac_cv_lib_fftw3l_omp_fftwl_init_threads" >&6; } if test "x$ac_cv_lib_fftw3l_omp_fftwl_init_threads" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3L_OMP 1 _ACEOF LIBS="-lfftw3l_omp $LIBS" else fftw_omp=no fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_omp" >&5 $as_echo_n "checking for fftw_init_threads in -lfftw3_omp... " >&6; } if ${ac_cv_lib_fftw3_omp_fftw_init_threads+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3_omp $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw_init_threads (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw_init_threads (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fftw3_omp_fftw_init_threads=yes else ac_cv_lib_fftw3_omp_fftw_init_threads=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_omp_fftw_init_threads" >&5 $as_echo "$ac_cv_lib_fftw3_omp_fftw_init_threads" >&6; } if test "x$ac_cv_lib_fftw3_omp_fftw_init_threads" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3_OMP 1 _ACEOF LIBS="-lfftw3_omp $LIBS" else fftw_omp=no fi fi if test $fftw_omp = no; then as_fn_error $? "Could not find OpenMP FFTW3 library; configure with --without-openmp" "$LINENO" 5 fi echo "*********************** OpenMP ***********************" fi ############################################################################## # Checks for BLAS and LAPACK libraries: ax_blas_ok=no # Check whether --with-blas was given. if test "${with_blas+set}" = set; then : withval=$with_blas; fi case $with_blas in yes | "") ;; no) ax_blas_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; *) BLAS_LIBS="-l$with_blas" ;; esac # Get fortran linker names of BLAS functions to check for. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SGEMM" ;; lower*) ac_val="sgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac sgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DGEMM" ;; lower*) ac_val="dgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac dgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_blas_save_LIBS="$LIBS" LIBS="$LIBS $FLIBS" # First, check BLAS_LIBS environment variable if test $ax_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in $BLAS_LIBS" >&5 $as_echo_n "checking for $sgemm in $BLAS_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_blas_ok=yes else BLAS_LIBS="" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_blas_ok" >&5 $as_echo "$ax_blas_ok" >&6; } LIBS="$save_LIBS" fi fi # BLAS linked to by default? (happens on some supercomputers) if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $sgemm is being linked in already" >&5 $as_echo_n "checking if $sgemm is being linked in already... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_blas_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_blas_ok" >&5 $as_echo "$ax_blas_ok" >&6; } LIBS="$save_LIBS" fi # BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/) if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_openblas_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lopenblas" >&5 $as_echo_n "checking for $sgemm in -lopenblas... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lopenblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes BLAS_LIBS="-lopenblas" fi fi # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) if test $ax_blas_ok = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATL_xerbla in -latlas" >&5 $as_echo_n "checking for ATL_xerbla in -latlas... " >&6; } if ${ac_cv_lib_atlas_ATL_xerbla+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-latlas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ATL_xerbla (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return ATL_xerbla (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_atlas_ATL_xerbla=yes else ac_cv_lib_atlas_ATL_xerbla=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 $as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; } if test "x$ac_cv_lib_atlas_ATL_xerbla" = xyes; then : as_ac_Lib=`$as_echo "ac_cv_lib_f77blas_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lf77blas" >&5 $as_echo_n "checking for $sgemm in -lf77blas... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lf77blas -latlas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_dgemm in -lcblas" >&5 $as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; } if ${ac_cv_lib_cblas_cblas_dgemm+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcblas -lf77blas -latlas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cblas_dgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return cblas_dgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cblas_cblas_dgemm=yes else ac_cv_lib_cblas_cblas_dgemm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 $as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; } if test "x$ac_cv_lib_cblas_cblas_dgemm" = xyes; then : ax_blas_ok=yes BLAS_LIBS="-lcblas -lf77blas -latlas" fi fi fi fi # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 $as_echo_n "checking for $sgemm in -lblas... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : as_ac_Lib=`$as_echo "ac_cv_lib_dgemm_$dgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dgemm in -ldgemm" >&5 $as_echo_n "checking for $dgemm in -ldgemm... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldgemm -lblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $dgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $dgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : as_ac_Lib=`$as_echo "ac_cv_lib_sgemm_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsgemm" >&5 $as_echo_n "checking for $sgemm in -lsgemm... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsgemm -lblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas" fi fi fi fi # BLAS in Intel MKL library? if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_mkl_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lmkl" >&5 $as_echo_n "checking for $sgemm in -lmkl... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmkl -lguide -lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread" fi fi # BLAS in Apple vecLib library? if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -framework vecLib" >&5 $as_echo_n "checking for $sgemm in -framework vecLib... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_blas_ok=yes;BLAS_LIBS="-framework vecLib" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_blas_ok" >&5 $as_echo "$ax_blas_ok" >&6; } LIBS="$save_LIBS" fi # BLAS in Alpha CXML library? if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_cxml_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcxml" >&5 $as_echo_n "checking for $sgemm in -lcxml... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcxml $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes;BLAS_LIBS="-lcxml" fi fi # BLAS in Alpha DXML library? (now called CXML, see above) if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_dxml_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -ldxml" >&5 $as_echo_n "checking for $sgemm in -ldxml... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldxml $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes;BLAS_LIBS="-ldxml" fi fi # BLAS in Sun Performance library? if test $ax_blas_ok = no; then if test "x$GCC" != xyes; then # only works with Sun CC { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acosp in -lsunmath" >&5 $as_echo_n "checking for acosp in -lsunmath... " >&6; } if ${ac_cv_lib_sunmath_acosp+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsunmath $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char acosp (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return acosp (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sunmath_acosp=yes else ac_cv_lib_sunmath_acosp=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunmath_acosp" >&5 $as_echo "$ac_cv_lib_sunmath_acosp" >&6; } if test "x$ac_cv_lib_sunmath_acosp" = xyes; then : as_ac_Lib=`$as_echo "ac_cv_lib_sunperf_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsunperf" >&5 $as_echo_n "checking for $sgemm in -lsunperf... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsunperf -lsunmath $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : BLAS_LIBS="-xlic_lib=sunperf -lsunmath" ax_blas_ok=yes fi fi fi fi # BLAS in SCSL library? (SGI/Cray Scientific Library) if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_scs_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lscs" >&5 $as_echo_n "checking for $sgemm in -lscs... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lscs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes; BLAS_LIBS="-lscs" fi fi # BLAS in SGIMATH library? if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_complib.sgimath_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcomplib.sgimath" >&5 $as_echo_n "checking for $sgemm in -lcomplib.sgimath... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcomplib.sgimath $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath" fi fi # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 $as_echo_n "checking for $sgemm in -lblas... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : as_ac_Lib=`$as_echo "ac_cv_lib_essl_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lessl" >&5 $as_echo_n "checking for $sgemm in -lessl... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lessl -lblas $FLIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas" fi fi fi # Generic BLAS library? if test $ax_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 $as_echo_n "checking for $sgemm in -lblas... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $sgemm (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $sgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_blas_ok=yes; BLAS_LIBS="-lblas" fi fi LIBS="$ax_blas_save_LIBS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_blas_ok" = xyes; then $as_echo "#define HAVE_BLAS 1" >>confdefs.h : else ax_blas_ok=no as_fn_error $? "BLAS was not found!" "$LINENO" 5 fi ax_lapack_ok=no # Check whether --with-lapack was given. if test "${with_lapack+set}" = set; then : withval=$with_lapack; fi case $with_lapack in yes | "") ;; no) ax_lapack_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; *) LAPACK_LIBS="-l$with_lapack" ;; esac # Get fortran linker name of LAPACK function to check for. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="CHEEV" ;; lower*) ac_val="cheev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cheev="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # We cannot use LAPACK if BLAS is not found if test "x$ax_blas_ok" != xyes; then ax_lapack_ok=noblas LAPACK_LIBS="" fi # First, check LAPACK_LIBS environment variable if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $cheev in $LAPACK_LIBS" >&5 $as_echo_n "checking for $cheev in $LAPACK_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $cheev (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $cheev (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_lapack_ok=yes else LAPACK_LIBS="" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lapack_ok" >&5 $as_echo "$ax_lapack_ok" >&6; } LIBS="$save_LIBS" if test $ax_lapack_ok = no; then LAPACK_LIBS="" fi fi # LAPACK linked to by default? (is sometimes included in BLAS lib) if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" as_ac_var=`$as_echo "ac_cv_func_$cheev" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$cheev" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : ax_lapack_ok=yes fi LIBS="$save_LIBS" fi # Generic LAPACK library? for lapack in lapack lapack_rs6k; do if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" as_ac_Lib=`$as_echo "ac_cv_lib_$lapack''_$cheev" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $cheev in -l$lapack" >&5 $as_echo_n "checking for $cheev in -l$lapack... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lapack $FLIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $cheev (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $cheev (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack" fi LIBS="$save_LIBS" fi done # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_lapack_ok" = xyes; then $as_echo "#define HAVE_LAPACK 1" >>confdefs.h : else ax_lapack_ok=no as_fn_error $? "LAPACK was not found!" "$LINENO" 5 fi LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" ############################################################################## # Check for MPI library if test "x$with_mpi" = "xyes"; then for ac_prog in mpicc hcc mpxlc_r mpxlc mpcc cmpicc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MPICC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MPICC"; then ac_cv_prog_MPICC="$MPICC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MPICC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MPICC=$ac_cv_prog_MPICC if test -n "$MPICC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5 $as_echo "$MPICC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPICC" && break done test -n "$MPICC" || MPICC="$CC" ax_mpi_save_CC="$CC" CC="$MPICC" if test x = x"$MPILIBS"; then ac_fn_c_check_func "$LINENO" "MPI_Init" "ac_cv_func_MPI_Init" if test "x$ac_cv_func_MPI_Init" = xyes; then : MPILIBS=" " fi fi if test x = x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpi" >&5 $as_echo_n "checking for MPI_Init in -lmpi... " >&6; } if ${ac_cv_lib_mpi_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return MPI_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpi_MPI_Init=yes else ac_cv_lib_mpi_MPI_Init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpi_MPI_Init" >&6; } if test "x$ac_cv_lib_mpi_MPI_Init" = xyes; then : MPILIBS="-lmpi" fi fi if test x = x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpich" >&5 $as_echo_n "checking for MPI_Init in -lmpich... " >&6; } if ${ac_cv_lib_mpich_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpich $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return MPI_Init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mpich_MPI_Init=yes else ac_cv_lib_mpich_MPI_Init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpich_MPI_Init" >&6; } if test "x$ac_cv_lib_mpich_MPI_Init" = xyes; then : MPILIBS="-lmpich" fi fi if test x != x"$MPILIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpi.h" >&5 $as_echo_n "checking for mpi.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else MPILIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi CC="$ax_mpi_save_CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then as_fn_error $? "could not find mpi library for --with-mpi" "$LINENO" 5 : else $as_echo "#define HAVE_MPI 1" >>confdefs.h : fi CC="$MPICC" LIBS="$MPILIBS $LIBS" # Make installed program mpb-mpi instead of mpb MPB_SUFFIX="${MPB_SUFFIX}_mpi" # Check for fftw_mpi library. if test "$enable_single" = "yes"; then as_ac_Lib=`$as_echo "ac_cv_lib_fftw3f_mpi_fftwf_mpi_${fftw3_func}_dft" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwf_mpi_${fftw3_func}_dft in -lfftw3f_mpi" >&5 $as_echo_n "checking for fftwf_mpi_${fftw3_func}_dft in -lfftw3f_mpi... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3f_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwf_mpi_${fftw3_func}_dft (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwf_mpi_${fftw3_func}_dft (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3F_MPI 1 _ACEOF LIBS="-lfftw3f_mpi $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwnd_mpi in -lsfftw_mpi" >&5 $as_echo_n "checking for fftwnd_mpi in -lsfftw_mpi... " >&6; } if ${ac_cv_lib_sfftw_mpi_fftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sfftw_mpi_fftwnd_mpi=yes else ac_cv_lib_sfftw_mpi_fftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sfftw_mpi_fftwnd_mpi" >&5 $as_echo "$ac_cv_lib_sfftw_mpi_fftwnd_mpi" >&6; } if test "x$ac_cv_lib_sfftw_mpi_fftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSFFTW_MPI 1 _ACEOF LIBS="-lsfftw_mpi $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftwnd_mpi in -lsrfftw_mpi" >&5 $as_echo_n "checking for rfftwnd_mpi in -lsrfftw_mpi... " >&6; } if ${ac_cv_lib_srfftw_mpi_rfftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsrfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_srfftw_mpi_rfftwnd_mpi=yes else ac_cv_lib_srfftw_mpi_rfftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_srfftw_mpi_rfftwnd_mpi" >&5 $as_echo "$ac_cv_lib_srfftw_mpi_rfftwnd_mpi" >&6; } if test "x$ac_cv_lib_srfftw_mpi_rfftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSRFFTW_MPI 1 _ACEOF LIBS="-lsrfftw_mpi $LIBS" fi fi fi elif test "$enable_long_double" = "yes"; then as_ac_Lib=`$as_echo "ac_cv_lib_fftw3l_mpi_fftwl_mpi_${fftw3_func}_dft" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwl_mpi_${fftw3_func}_dft in -lfftw3l_mpi" >&5 $as_echo_n "checking for fftwl_mpi_${fftw3_func}_dft in -lfftw3l_mpi... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3l_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwl_mpi_${fftw3_func}_dft (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwl_mpi_${fftw3_func}_dft (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3L_MPI 1 _ACEOF LIBS="-lfftw3l_mpi $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwnd_mpi in -lxfftw_mpi" >&5 $as_echo_n "checking for fftwnd_mpi in -lxfftw_mpi... " >&6; } if ${ac_cv_lib_xfftw_mpi_fftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xfftw_mpi_fftwnd_mpi=yes else ac_cv_lib_xfftw_mpi_fftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xfftw_mpi_fftwnd_mpi" >&5 $as_echo "$ac_cv_lib_xfftw_mpi_fftwnd_mpi" >&6; } if test "x$ac_cv_lib_xfftw_mpi_fftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXFFTW_MPI 1 _ACEOF LIBS="-lxfftw_mpi $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftwnd_mpi in -lxrfftw_mpi" >&5 $as_echo_n "checking for rfftwnd_mpi in -lxrfftw_mpi... " >&6; } if ${ac_cv_lib_xrfftw_mpi_rfftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxrfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xrfftw_mpi_rfftwnd_mpi=yes else ac_cv_lib_xrfftw_mpi_rfftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xrfftw_mpi_rfftwnd_mpi" >&5 $as_echo "$ac_cv_lib_xrfftw_mpi_rfftwnd_mpi" >&6; } if test "x$ac_cv_lib_xrfftw_mpi_rfftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXRFFTW_MPI 1 _ACEOF LIBS="-lxrfftw_mpi $LIBS" fi fi fi else as_ac_Lib=`$as_echo "ac_cv_lib_fftw3_mpi_fftw_mpi_${fftw3_func}_dft" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_mpi_${fftw3_func}_dft in -lfftw3_mpi" >&5 $as_echo_n "checking for fftw_mpi_${fftw3_func}_dft in -lfftw3_mpi... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftw_mpi_${fftw3_func}_dft (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftw_mpi_${fftw3_func}_dft (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW3_MPI 1 _ACEOF LIBS="-lfftw3_mpi $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwnd_mpi in -ldfftw_mpi" >&5 $as_echo_n "checking for fftwnd_mpi in -ldfftw_mpi... " >&6; } if ${ac_cv_lib_dfftw_mpi_fftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dfftw_mpi_fftwnd_mpi=yes else ac_cv_lib_dfftw_mpi_fftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dfftw_mpi_fftwnd_mpi" >&5 $as_echo "$ac_cv_lib_dfftw_mpi_fftwnd_mpi" >&6; } if test "x$ac_cv_lib_dfftw_mpi_fftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDFFTW_MPI 1 _ACEOF LIBS="-ldfftw_mpi $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftwnd_mpi in -ldrfftw_mpi" >&5 $as_echo_n "checking for rfftwnd_mpi in -ldrfftw_mpi... " >&6; } if ${ac_cv_lib_drfftw_mpi_rfftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldrfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_drfftw_mpi_rfftwnd_mpi=yes else ac_cv_lib_drfftw_mpi_rfftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_drfftw_mpi_rfftwnd_mpi" >&5 $as_echo "$ac_cv_lib_drfftw_mpi_rfftwnd_mpi" >&6; } if test "x$ac_cv_lib_drfftw_mpi_rfftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDRFFTW_MPI 1 _ACEOF LIBS="-ldrfftw_mpi $LIBS" fi fi fi fi if test x = x"`echo $LIBS | egrep 'l[ds]fftw_mpi|lfftw3f_mpi|lfftw3l_mpi|lfftw3_mpi'`"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwnd_mpi in -lfftw_mpi" >&5 $as_echo_n "checking for fftwnd_mpi in -lfftw_mpi... " >&6; } if ${ac_cv_lib_fftw_mpi_fftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fftw_mpi_fftwnd_mpi=yes else ac_cv_lib_fftw_mpi_fftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw_mpi_fftwnd_mpi" >&5 $as_echo "$ac_cv_lib_fftw_mpi_fftwnd_mpi" >&6; } if test "x$ac_cv_lib_fftw_mpi_fftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBFFTW_MPI 1 _ACEOF LIBS="-lfftw_mpi $LIBS" fi if test x"$inv_sym" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfftwnd_mpi in -lrfftw_mpi" >&5 $as_echo_n "checking for rfftwnd_mpi in -lrfftw_mpi... " >&6; } if ${ac_cv_lib_rfftw_mpi_rfftwnd_mpi+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrfftw_mpi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfftwnd_mpi (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return rfftwnd_mpi (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rfftw_mpi_rfftwnd_mpi=yes else ac_cv_lib_rfftw_mpi_rfftwnd_mpi=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rfftw_mpi_rfftwnd_mpi" >&5 $as_echo "$ac_cv_lib_rfftw_mpi_rfftwnd_mpi" >&6; } if test "x$ac_cv_lib_rfftw_mpi_rfftwnd_mpi" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRFFTW_MPI 1 _ACEOF LIBS="-lrfftw_mpi $LIBS" fi fi fi if test x = x"`echo $LIBS | egrep 'l[ds]*fftw_mpi|lfftw3f_mpi|lfftw3l_mpi|lfftw3_mpi'`"; then as_fn_error $? "couldn't find fftw MPI library for --with-mpi" "$LINENO" 5 fi if test x"$inv_sym" = xyes; then if test x = x"`echo $LIBS | egrep 'l[ds]*rfftw_mpi|lfftw3l_mpi|lfftw3f_mpi|lfftw3_mpi'`"; then as_fn_error $? "couldn't find rfftw_mpi library for --with-mpi --with-inv-symmetry" "$LINENO" 5 fi fi $as_echo "#define HAVE_MPI 1" >>confdefs.h fi if test "x$with_mpi" = "xyes"; then MPI_TRUE= MPI_FALSE='#' else MPI_TRUE='#' MPI_FALSE= fi ############################################################################## # Check for HDF5 library # Check whether --with-hdf5 was given. if test "${with_hdf5+set}" = set; then : withval=$with_hdf5; ok=$withval else ok=yes fi if test "$ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 $as_echo_n "checking for deflate in -lz... " >&6; } if ${ac_cv_lib_z_deflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflate (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflate=yes else ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 $as_echo "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: zlib is required for HDF5!" >&5 $as_echo "$as_me: WARNING: zlib is required for HDF5!" >&2;} fi save_LIBS_0="$LIBS" # save, to check later if we found any library { $as_echo "$as_me:${as_lineno-$LINENO}: checking for H5Pcreate in -lhdf5" >&5 $as_echo_n "checking for H5Pcreate in -lhdf5... " >&6; } if ${ac_cv_lib_hdf5_H5Pcreate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lhdf5 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char H5Pcreate (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return H5Pcreate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_hdf5_H5Pcreate=yes else ac_cv_lib_hdf5_H5Pcreate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hdf5_H5Pcreate" >&5 $as_echo "$ac_cv_lib_hdf5_H5Pcreate" >&6; } if test "x$ac_cv_lib_hdf5_H5Pcreate" = xyes; then : for ac_header in hdf5.h do : ac_fn_c_check_header_mongrel "$LINENO" "hdf5.h" "ac_cv_header_hdf5_h" "$ac_includes_default" if test "x$ac_cv_header_hdf5_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HDF5_H 1 _ACEOF LIBS="-lhdf5 $LIBS" $as_echo "#define HAVE_HDF5 1" >>confdefs.h fi done fi if test x"$save_LIBS_0" = x"$LIBS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Couldn't find the HDF5 library!! Switching to --without-hdf5." >&5 $as_echo "$as_me: WARNING: Couldn't find the HDF5 library!! Switching to --without-hdf5." >&2;} fi if test x != x"$MPILIBS"; then for ac_func in H5Pset_mpi H5Pset_fapl_mpio do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi fi ############################################################################## # Check for Guile library and flags: # Extract the first word of "guile", so it can be a program name with args. set dummy guile; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_guile_ok+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$guile_ok"; then ac_cv_prog_guile_ok="$guile_ok" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_guile_ok="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_guile_ok" && ac_cv_prog_guile_ok="no" fi fi guile_ok=$ac_cv_prog_guile_ok if test -n "$guile_ok"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $guile_ok" >&5 $as_echo "$guile_ok" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$guile_ok" = xno; then as_fn_error $? "could not find guile program; check your PATH" "$LINENO" 5 fi # Extract the first word of "guile-config", so it can be a program name with args. set dummy guile-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GUILE_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GUILE_CONFIG"; then ac_cv_prog_GUILE_CONFIG="$GUILE_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GUILE_CONFIG="guile-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_GUILE_CONFIG" && ac_cv_prog_GUILE_CONFIG="unknown" fi fi GUILE_CONFIG=$ac_cv_prog_GUILE_CONFIG if test -n "$GUILE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_CONFIG" >&5 $as_echo "$GUILE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$GUILE_CONFIG" = "xunknown"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if ${ac_cv_lib_readline_readline+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else ac_cv_lib_readline_readline=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBREADLINE 1 _ACEOF LIBS="-lreadline $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for scm_lt_dlinit in -lguile-ltdl" >&5 $as_echo_n "checking for scm_lt_dlinit in -lguile-ltdl... " >&6; } if ${ac_cv_lib_guile_ltdl_scm_lt_dlinit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lguile-ltdl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char scm_lt_dlinit (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return scm_lt_dlinit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_guile_ltdl_scm_lt_dlinit=yes else ac_cv_lib_guile_ltdl_scm_lt_dlinit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_guile_ltdl_scm_lt_dlinit" >&5 $as_echo "$ac_cv_lib_guile_ltdl_scm_lt_dlinit" >&6; } if test "x$ac_cv_lib_guile_ltdl_scm_lt_dlinit" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGUILE_LTDL 1 _ACEOF LIBS="-lguile-ltdl $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lltdl" >&5 $as_echo_n "checking for dlopen in -lltdl... " >&6; } if ${ac_cv_lib_ltdl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lltdl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ltdl_dlopen=yes else ac_cv_lib_ltdl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ltdl_dlopen" >&5 $as_echo "$ac_cv_lib_ltdl_dlopen" >&6; } if test "x$ac_cv_lib_ltdl_dlopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBLTDL 1 _ACEOF LIBS="-lltdl $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gh_eval_str in -lguile" >&5 $as_echo_n "checking for gh_eval_str in -lguile... " >&6; } if ${ac_cv_lib_guile_gh_eval_str+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lguile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gh_eval_str (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return gh_eval_str (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_guile_gh_eval_str=yes else ac_cv_lib_guile_gh_eval_str=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_guile_gh_eval_str" >&5 $as_echo "$ac_cv_lib_guile_gh_eval_str" >&6; } if test "x$ac_cv_lib_guile_gh_eval_str" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGUILE 1 _ACEOF LIBS="-lguile $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for scm_eval_string in -lguile" >&5 $as_echo_n "checking for scm_eval_string in -lguile... " >&6; } if ${ac_cv_lib_guile_scm_eval_string+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lguile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char scm_eval_string (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return scm_eval_string (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_guile_scm_eval_string=yes else ac_cv_lib_guile_scm_eval_string=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_guile_scm_eval_string" >&5 $as_echo "$ac_cv_lib_guile_scm_eval_string" >&6; } if test "x$ac_cv_lib_guile_scm_eval_string" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGUILE 1 _ACEOF LIBS="-lguile $LIBS" else as_fn_error $? "linking to guile failed" "$LINENO" 5 fi fi else CPPFLAGS="$CPPFLAGS `$GUILE_CONFIG compile`" LIBS="`$GUILE_CONFIG link` $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if linking to guile works" >&5 $as_echo_n "checking if linking to guile works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gh_enter (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return gh_enter (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char scm_boot_guile (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return scm_boot_guile (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "guile-config is broken" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi for ac_header in libguile.h guile/gh.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check how smob types work in this Guile version: for ac_func in scm_make_smob_type scm_array_get_handle scm_is_array do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCM_SMOB_PREDICATE" >&5 $as_echo_n "checking for SCM_SMOB_PREDICATE... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(HAVE_LIBGUILE_H) # include #else # include # include #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { int x; SCM_SMOB_PREDICATE(1,x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=yes else ok=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5 $as_echo "$ok" >&6; } if test $ok = yes; then $as_echo "#define HAVE_SCM_SMOB_PREDICATE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCM_SMOB_DATA" >&5 $as_echo_n "checking for SCM_SMOB_DATA... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(HAVE_LIBGUILE_H) # include #else # include # include #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { int x; SCM_SMOB_DATA(x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=yes else ok=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5 $as_echo "$ok" >&6; } if test $ok = yes; then $as_echo "#define HAVE_SCM_SMOB_DATA 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCM_NEWSMOB" >&5 $as_echo_n "checking for SCM_NEWSMOB... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(HAVE_LIBGUILE_H) # include #else # include # include #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { int x; SCM_NEWSMOB(x,1,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ok=yes else ok=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5 $as_echo "$ok" >&6; } if test $ok = yes; then $as_echo "#define HAVE_SCM_NEWSMOB 1" >>confdefs.h fi # Check how to activate Guile readline support: ACTIVATE_READLINE="" if test "x$cross_compiling" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to activate readline in Guile" >&5 $as_echo_n "checking how to activate readline in Guile... " >&6; } ractivate="(use-modules (readline-activator)) (activate-readline)" if guile -c "$ractivate" > /dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: readline-activator" >&5 $as_echo "readline-activator" >&6; } ACTIVATE_READLINE="$ractivate" else ractivate="(use-modules (ice-9 readline)) (activate-readline)" if guile -c "$ractivate" > /dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ice-9 readline" >&5 $as_echo "ice-9 readline" >&6; } ACTIVATE_READLINE="$ractivate" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot" >&5 $as_echo "cannot" >&6; } ACTIVATE_READLINE="" fi fi fi ############################################################################## # Check for libctl library and files # Check whether --with-libctl was given. if test "${with_libctl+set}" = set; then : withval=$with_libctl; ok=$withval else ok=yes fi if test "$ok" = "no"; then as_fn_error $? "libctl is required and you may not disable it" "$LINENO" 5 elif test "$ok" != "yes"; then LIBCTL_DIR="$ok" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libctl dir" >&5 $as_echo_n "checking for libctl dir... " >&6; } if test x != x"$LIBCTL_DIR" -a ! -r "$LIBCTL_DIR/base/ctl.scm"; then LIBCTL_DIR="" fi if test x = x"$LIBCTL_DIR" -a -r /usr/local/share/libctl/base/ctl.scm; then LIBCTL_DIR="/usr/local/share/libctl" fi if test x = x"$LIBCTL_DIR" -a -r /usr/share/libctl3/base/ctl.scm; then LIBCTL_DIR="/usr/share/libctl3" fi if test x = x"$LIBCTL_DIR" -a -r /usr/share/libctl/base/ctl.scm; then LIBCTL_DIR="/usr/share/libctl" fi if test x = x"$LIBCTL_DIR"; then as_fn_error $? "could not find libctl files; use --with-libctl=" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBCTL_DIR" >&5 $as_echo "$LIBCTL_DIR" >&6; } for ac_prog in gen-ctl-io do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GEN_CTL_IO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GEN_CTL_IO"; then ac_cv_prog_GEN_CTL_IO="$GEN_CTL_IO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GEN_CTL_IO="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GEN_CTL_IO=$ac_cv_prog_GEN_CTL_IO if test -n "$GEN_CTL_IO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GEN_CTL_IO" >&5 $as_echo "$GEN_CTL_IO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GEN_CTL_IO" && break done test -n "$GEN_CTL_IO" || GEN_CTL_IO="echo" if test x"$GEN_CTL_IO" = xecho; then as_fn_error $? "could not find gen-ctl-io program; check your PATH" "$LINENO" 5 fi # check for -lctl: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ctl_get_vector3 in -lctl" >&5 $as_echo_n "checking for ctl_get_vector3 in -lctl... " >&6; } if ${ac_cv_lib_ctl_ctl_get_vector3+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lctl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ctl_get_vector3 (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return ctl_get_vector3 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ctl_ctl_get_vector3=yes else ac_cv_lib_ctl_ctl_get_vector3=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ctl_ctl_get_vector3" >&5 $as_echo "$ac_cv_lib_ctl_ctl_get_vector3" >&6; } if test "x$ac_cv_lib_ctl_ctl_get_vector3" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBCTL 1 _ACEOF LIBS="-lctl $LIBS" else as_fn_error $? "Couldn't find the required libctl library." "$LINENO" 5 fi # check for ctl.h (Fedora puts it in /usr/include/ctl, grrr) CTL_H_CPPFLAG="" ac_fn_c_check_header_mongrel "$LINENO" "ctl.h" "ac_cv_header_ctl_h" "$ac_includes_default" if test "x$ac_cv_header_ctl_h" = xyes; then : CTL_H_CPPFLAG=" " else save_CPPFLAGS=$CPPFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alternate ctl.h location" >&5 $as_echo_n "checking for alternate ctl.h location... " >&6; } for ctl_h_path in /usr/include/ctl /usr/local/include/ctl; do CPPFLAGS="$save_CPPFLAGS -I$ctl_h_path" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : CTL_H_CPPFLAG=-I$ctl_h_path; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CTL_H_CPPFLAG" >&5 $as_echo "$CTL_H_CPPFLAG" >&6; } CPPFLAGS=$save_CPPFLAGS fi if test "x$CTL_H_CPPFLAG" = "x"; then as_fn_error $? "Couldn't find the ctl.h header file for libctl." "$LINENO" 5 fi # Check libctl version >= LIBCTL_MAJOR.LIBCTL_MINOR.LIBCTL_BUGFIX LIBCTL_MAJOR=3; LIBCTL_MINOR=2; LIBCTL_BUGFIX=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libctl version is at least ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX}" >&5 $as_echo_n "checking whether libctl version is at least ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX}... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ [ #include #if LIBCTL_MAJOR_VERSION > $LIBCTL_MAJOR || (LIBCTL_MAJOR_VERSION == $LIBCTL_MAJOR && (LIBCTL_MINOR_VERSION > $LIBCTL_MINOR || (LIBCTL_MINOR_VERSION == $LIBCTL_MINOR && LIBCTL_BUGFIX_VERSION >= $LIBCTL_BUGFIX))) yes #endif ] _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "libctl version ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX} or later is required" "$LINENO" 5 fi rm -f conftest* # Check for libctl_quiet feature (in libctl 3.1.1 or later): { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libctl_quiet feature" >&5 $as_echo_n "checking for libctl_quiet feature... " >&6; } if grep libctl_quiet "$LIBCTL_DIR/base/main.c" 2>&1 > /dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBCTL_QUIET 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # On IRIX, basename/dirname functions in libctl/main.c require -lgen { $as_echo "$as_me:${as_lineno-$LINENO}: checking for basename in -lgen" >&5 $as_echo_n "checking for basename in -lgen... " >&6; } if ${ac_cv_lib_gen_basename+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char basename (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return basename (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_basename=yes else ac_cv_lib_gen_basename=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_basename" >&5 $as_echo "$ac_cv_lib_gen_basename" >&6; } if test "x$ac_cv_lib_gen_basename" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEN 1 _ACEOF LIBS="-lgen $LIBS" fi ############################################################################## # check for nlopt library for ac_header in nlopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "nlopt.h" "ac_cv_header_nlopt_h" "$ac_includes_default" if test "x$ac_cv_header_nlopt_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NLOPT_H 1 _ACEOF fi done NLOPT_LIB="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nlopt_minimize in -lnlopt" >&5 $as_echo_n "checking for nlopt_minimize in -lnlopt... " >&6; } if ${ac_cv_lib_nlopt_nlopt_minimize+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnlopt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nlopt_minimize (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return nlopt_minimize (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nlopt_nlopt_minimize=yes else ac_cv_lib_nlopt_nlopt_minimize=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nlopt_nlopt_minimize" >&5 $as_echo "$ac_cv_lib_nlopt_nlopt_minimize" >&6; } if test "x$ac_cv_lib_nlopt_nlopt_minimize" = xyes; then : $as_echo "#define HAVE_NLOPT 1" >>confdefs.h NLOPT_LIB="-lnlopt" fi ############################################################################## # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in unistd.h getopt.h nlopt.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac # Checks for library functions. for ac_func in getopt strncmp do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ############################################################################## # Check to see if calling Fortran functions (in particular, the BLAS # complex dot product functions) works from C: { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether calling BLAS zdotc works" >&5 $as_echo_n "checking whether calling BLAS zdotc works... " >&6; } ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="ZDOTC" ;; lower*) ac_val="zdotc" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac zdotc="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$cross_compiling" = yes; then : ok="no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include typedef struct { double re, im; } cmplx; #ifdef __cplusplus extern "C" #endif extern cmplx $zdotc(int *, cmplx *, int *, cmplx *, int *); int main(void) { cmplx x[2] = { {1,0}, {0,1} }, y[2] = { {1,0}, {1,0} }; int n = 2, inc1 = 1, inc2 = 1; cmplx result = { 0, 0 }; result = $zdotc(&n, x, &inc1, y, &inc2); if (result.re != 1 || result.im != -1) return EXIT_FAILURE; else return EXIT_SUCCESS; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ok="yes" else ok="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5 $as_echo "$ok" >&6; } if test "$ok" = "no"; then $as_echo "#define NO_FORTRAN_FUNCTIONS 1" >>confdefs.h fi ############################################################################## # grab the various EIGS_ flags from eigensolver.h and substitute them # into mpb.scm.in (are not regular expressions fun?): # (note that autoconf gets unhappy if we have newlines; we must delete them) EIGS_FLAGS_SCM=`grep '#define EIGS_' $srcdir/src/matrices/eigensolver.h |sed 's/#define \([A-Za-z0-9_]*\) (1<<\([0-9]*\))/(define \1 (pow2 \2))/' |sed 's/#define \([A-Za-z0-9_]*\) (\(.*\))/(define \1 (+ \2))/' |sed 's/ *| */ /g' | tr -d '\n'` ############################################################################## # Find a shell that supports job control, for mpb-split: # Extract the first word of "bash ksh ash", so it can be a program name with args. set dummy bash ksh ash; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SH_JOB+:} false; then : $as_echo_n "(cached) " >&6 else case $SH_JOB in [\\/]* | ?:[\\/]*) ac_cv_path_SH_JOB="$SH_JOB" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SH_JOB="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SH_JOB" && ac_cv_path_SH_JOB="sh" ;; esac fi SH_JOB=$ac_cv_path_SH_JOB if test -n "$SH_JOB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH_JOB" >&5 $as_echo "$SH_JOB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$SH_JOB" = xsh; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Couldn't find bash or ksh shell on your system. The mpb-split command may not work if your sh doesn't support job control." >&5 $as_echo "$as_me: WARNING: Couldn't find bash or ksh shell on your system. The mpb-split command may not work if your sh doesn't support job control." >&2;} fi ############################################################################## # The following function is used only for debugging. Note that # we must test for it *after* setting the compiler flags (which # affect whether it is declared, as it is a GNU extension). # We need to #include because that somehow affects whether # the function is declared with older gcc versions. We need # to use AC_TRY_COMPILE because the test in AC_HAVE_DECL seems # to be optimized out. for ac_func in feenableexcept do : ac_fn_c_check_func "$LINENO" "feenableexcept" "ac_cv_func_feenableexcept" if test "x$ac_cv_func_feenableexcept" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FEENABLEEXCEPT 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether feenableexcept declaration is usable" >&5 $as_echo_n "checking whether feenableexcept declaration is usable... " >&6; } feenableexcept_decl_ok=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define _GNU_SOURCE 1 #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { feenableexcept(0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_DECL_FEENABLEEXCEPT 1" >>confdefs.h else feenableexcept_decl_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $feenableexcept_decl_ok" >&5 $as_echo "$feenableexcept_decl_ok" >&6; } ############################################################################## program_transform_name="s,_,-,g;$program_transform_name" ############################################################################## ac_config_files="$ac_config_files Makefile examples/Makefile tests/Makefile src/Makefile src/util/Makefile src/matrices/Makefile src/matrixio/Makefile src/maxwell/Makefile mpb/Makefile mpb/mpb.scm mpb/mpb-split-preinstall utils/Makefile" # meb/Makefile # meb/meb.scm # meb/meb-split-preinstall cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MPI_TRUE}" && test -z "${MPI_FALSE}"; then as_fn_error $? "conditional \"MPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by mpb $as_me 1.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ mpb config.status 1.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ LD_F77 \ reload_flag_F77 \ compiler_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_static_F77 \ lt_cv_prog_compiler_c_o_F77 \ export_dynamic_flag_spec_F77 \ whole_archive_flag_spec_F77 \ compiler_needs_object_F77 \ with_gnu_ld_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_separator_F77 \ exclude_expsyms_F77 \ include_expsyms_F77 \ file_list_spec_F77; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ export_symbols_cmds_F77 \ prelink_cmds_F77 \ postlink_cmds_F77; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "src/mpbconf.h") CONFIG_HEADERS="$CONFIG_HEADERS src/mpbconf.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/Makefile" ;; "src/matrices/Makefile") CONFIG_FILES="$CONFIG_FILES src/matrices/Makefile" ;; "src/matrixio/Makefile") CONFIG_FILES="$CONFIG_FILES src/matrixio/Makefile" ;; "src/maxwell/Makefile") CONFIG_FILES="$CONFIG_FILES src/maxwell/Makefile" ;; "mpb/Makefile") CONFIG_FILES="$CONFIG_FILES mpb/Makefile" ;; "mpb/mpb.scm") CONFIG_FILES="$CONFIG_FILES mpb/mpb.scm" ;; "mpb/mpb-split-preinstall") CONFIG_FILES="$CONFIG_FILES mpb/mpb-split-preinstall" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="F77 " # ### BEGIN LIBTOOL CONFIG # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # ### END LIBTOOL TAG CONFIG: F77 _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi mpb-1.5/README.md0000644000175400001440000000076112315336637010352 00000000000000MIT Photonic-Bands: http://ab-initio.mit.edu/mpb A program for computing photonic band structures, developed by Steven G. Johnson (stevenj@alum.mit.edu), originally in the Joannoupoulos Ab-Initio Physics group in the MIT Physics Department and now in MIT Applied Mathematics See the MIT Photonic-Bands web page, for a complete description of the package and its user interface, as well as installation instructions, the license and copyright, contact addresses, and other important information. mpb-1.5/install-sh0000755000175400001440000003325512235234727011101 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: mpb-1.5/COPYRIGHT0000644000175400001440000000142312315341423010347 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ mpb-1.5/Makefile.in0000644000175400001440000006304112315337210011124 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in AUTHORS COPYING NEWS TODO compile \ config.guess config.sub depcomp install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src tests mpb utils examples # meb EXTRA_DIST = COPYRIGHT TODO doc m4 README.md all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck 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 \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am dist-hook: git log > $(distdir)/ChangeLog # 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: mpb-1.5/AUTHORS0000644000175400001440000000007512315325635010135 00000000000000MPB was written by Steven G. Johnson (stevenj@alum.mit.edu). mpb-1.5/mpb/0000755000175400001440000000000012315341511007710 500000000000000mpb-1.5/mpb/Makefile.am0000644000175400001440000000603312315326211011666 00000000000000# libctl: flexible Guile-based control files for scientific software # Copyright (C) 1998, 1999-2012, Steven G. Johnson # # This file may be used without restriction. It is in the public # domain, and is NOT restricted by the terms of any GNU license. # # This 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. # # Steven G. Johnson can be contacted at stevenj@alum.mit.edu. ############################################################################## bin_PROGRAMS = mpb@MPB_SUFFIX@ SPECIFICATION_FILE = mpb.scm EXTRA_DIST = mpb.scm.in nodist_pkgdata_DATA = $(SPECIFICATION_FILE) MY_SOURCES = epsilon.c epsilon_file.c field-smob.c fields.c \ material_grid.c material_grid_opt.c matrix-smob.c mpb.c field-smob.h matrix-smob.h mpb.h my-smob.h MY_LIBS = $(top_builddir)/src/matrixio/libmatrixio.a $(top_builddir)/src/libmpb@MPB_SUFFIX@.la $(NLOPT_LIB) MY_CPPFLAGS = -I$(top_srcdir)/src/util -I$(top_srcdir)/src/matrices -I$(top_srcdir)/src/matrixio -I$(top_srcdir)/src/maxwell MY_DEFS = -DHAVE_CTL_HOOKS=1 -DHAVE_CTL_EXPORT_HOOK=1 # what is printed out when invoking your program with --version: VERSION_STRING = "mpb@MPB_SUFFIX@ @VERSION@, Copyright (C) 1999-2012, MIT" check-local: mpb@MPB_SUFFIX@ ./mpb@MPB_SUFFIX@ $(top_srcdir)/examples/check.ctl dist_man_MANS = mpb-split.1 mpb.1 if !MPI bin_SCRIPTS = mpb@MPB_SUFFIX@-split endif mpb@MPB_SUFFIX@-split: mpb-split-preinstall sed "s%\./mpb%"$(prefix)/bin/"mpb@MPB_SUFFIX@%g" \ mpb-split-preinstall > $@ chmod u+x $@ # The following variables should be detected and set by autoconf: # libctl install. dir., e.g. /usr/local/share/libctl LIBCTL_DIR = @LIBCTL_DIR@ # gen-ctl-io program GEN_CTL_IO = @GEN_CTL_IO@ ############################################################################## # don't (normally) edit below except to replace "mpb" with your name # ############################################################################## CTL_DEFS = -DCTL_SCM='"'$(LIBCTL_DIR)/base/ctl.scm'"' \ -DINCLUDE_SCM='"'$(LIBCTL_DIR)/base/include.scm'"' \ -DSPEC_SCM='"'$(pkgdatadir)/$(SPECIFICATION_FILE)'"' \ -DVERSION_STRING='"'$(VERSION_STRING)'"' mpb@MPB_SUFFIX@_SOURCES = $(MY_SOURCES) nodist_mpb@MPB_SUFFIX@_SOURCES = main.c geom.c ctl-io.h ctl-io.c BUILT_SOURCES = $(nodist_mpb@MPB_SUFFIX@_SOURCES) mpb@MPB_SUFFIX@_LDADD = $(MY_LIBS) mpb@MPB_SUFFIX@_LDFLAGS = $(MY_LDFLAGS) mpb@MPB_SUFFIX@_CPPFLAGS = $(MY_CPPFLAGS) $(MY_DEFS) $(CTL_DEFS) $(CTL_H_CPPFLAG) main.c: $(LIBCTL_DIR)/base/main.c cp -f $(LIBCTL_DIR)/base/main.c $@ geom.c: $(LIBCTL_DIR)/utils/geom.c cp -f $(LIBCTL_DIR)/utils/geom.c $@ ctl-io.c: $(SPECIFICATION_FILE) $(LIBCTL_DIR)/utils/geom.scm $(GEN_CTL_IO) --code -o $@ $(SPECIFICATION_FILE) $(LIBCTL_DIR) ctl-io.h: $(SPECIFICATION_FILE) $(LIBCTL_DIR)/utils/geom.scm $(GEN_CTL_IO) --header -o $@ $(SPECIFICATION_FILE) $(LIBCTL_DIR) clean-local: rm -f ctl-io.* main.* geom.* mpb-1.5/mpb/epsilon.c0000644000175400001440000005263712315341423011464 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include #include "mpb.h" int no_size_x = 0, no_size_y = 0, no_size_z = 0; geom_box_tree geometry_tree = NULL; /* recursive tree of geometry objects for fast searching */ /**************************************************************************/ typedef struct { maxwell_dielectric_function eps_file_func; void *eps_file_func_data; } epsilon_func_data; static material_type make_dielectric(double epsilon) { material_type m; m.which_subclass = DIELECTRIC; CHK_MALLOC(m.subclass.dielectric_data, dielectric, 1); m.subclass.dielectric_data->epsilon = epsilon; return m; } static void material_eps(material_type material, symmetric_matrix *eps, symmetric_matrix *eps_inv) { switch (material.which_subclass) { case DIELECTRIC: { real eps_val = material.subclass.dielectric_data->epsilon; eps->m00 = eps->m11 = eps->m22 = eps_val; eps_inv->m00 = eps_inv->m11 = eps_inv->m22 = 1.0 / eps_val; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_ZERO(eps->m01); CASSIGN_ZERO(eps->m02); CASSIGN_ZERO(eps->m12); CASSIGN_ZERO(eps_inv->m01); CASSIGN_ZERO(eps_inv->m02); CASSIGN_ZERO(eps_inv->m12); #else eps->m01 = eps->m02 = eps->m12 = 0.0; eps_inv->m01 = eps_inv->m02 = eps_inv->m12 = 0.0; #endif break; } case DIELECTRIC_ANISOTROPIC: { dielectric_anisotropic *d = material.subclass.dielectric_anisotropic_data; eps->m00 = d->epsilon_diag.x; eps->m11 = d->epsilon_diag.y; eps->m22 = d->epsilon_diag.z; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_SCALAR(eps->m01, d->epsilon_offdiag.x.re, d->epsilon_offdiag.x.im + d->epsilon_offdiag_imag.x); CASSIGN_SCALAR(eps->m02, d->epsilon_offdiag.y.re, d->epsilon_offdiag.y.im + d->epsilon_offdiag_imag.y); CASSIGN_SCALAR(eps->m12, d->epsilon_offdiag.z.re, d->epsilon_offdiag.z.im + d->epsilon_offdiag_imag.z); #else eps->m01 = d->epsilon_offdiag.x.re; eps->m02 = d->epsilon_offdiag.y.re; eps->m12 = d->epsilon_offdiag.z.re; CHECK(vector3_norm(vector3_plus( cvector3_im(d->epsilon_offdiag), d->epsilon_offdiag_imag)) == 0.0, "imaginary epsilon-offdiag is only supported when MPB is configured --with-hermitian-eps"); #endif maxwell_sym_matrix_invert(eps_inv, eps); break; } case MATERIAL_GRID: CHECK(0, "invalid use of material-grid"); break; case MATERIAL_FUNCTION: CHECK(0, "invalid use of material-function"); break; case MATERIAL_TYPE_SELF: CHECK(0, "invalid use of material-type"); break; } } /* Given a position r in the basis of the lattice vectors, return the corresponding dielectric tensor and its inverse. Should be called from within init_params (or after init_params), so that the geometry input variables will have been read in (for use in libgeom). This function is passed to set_maxwell_dielectric to initialize the dielectric tensor array for eigenvector calculations. */ static void epsilon_func(symmetric_matrix *eps, symmetric_matrix *eps_inv, const real r[3], void *edata) { epsilon_func_data *d = (epsilon_func_data *) edata; geom_box_tree tp; int oi; material_type material; vector3 p; boolean inobject; /* p needs to be in the lattice *unit* vector basis, while r is in the lattice vector basis. Also, shift origin to the center of the grid. */ p.x = no_size_x ? 0 : (r[0] - 0.5) * geometry_lattice.size.x; p.y = no_size_y ? 0 : (r[1] - 0.5) * geometry_lattice.size.y; p.z = no_size_z ? 0 : (r[2] - 0.5) * geometry_lattice.size.z; /* call search routine from libctl/utils/libgeom/geom.c: (we have to use the lower-level geom_tree_search to support material-grid types, which have funny semantics) */ tp = geom_tree_search(p = shift_to_unit_cell(p), geometry_tree, &oi); if (tp) { inobject = 1; material = tp->objects[oi].o->material; } else { inobject = 0; material = default_material; } #ifdef DEBUG_GEOMETRY_TREE { material_type m2 = material_of_point_inobject(p, &inobject); CHECK(m2.which_subclass == material.which_subclass && m2.subclass.dielectric_data == material.subclass.dielectric_data, "material_of_point & material_of_point_in_tree don't agree!"); } #endif if (material.which_subclass == MATERIAL_TYPE_SELF) { material = default_material; tp = 0; inobject = 0; /* treat as a "nothing" object */ } /* if we aren't in any geometric object and we have an epsilon file, use that. */ if (!inobject && d->eps_file_func) { d->eps_file_func(eps, eps_inv, r, d->eps_file_func_data); } else { boolean destroy_material = 0; while (material.which_subclass == MATERIAL_FUNCTION) { material_type m; SCM mo; /* material_func is a Scheme function, taking a position vector and returning a material at that point: */ mo = gh_call1(material.subclass. material_function_data->material_func, ctl_convert_vector3_to_scm(p)); material_type_input(mo, &m); if (destroy_material) material_type_destroy(material); material = m; destroy_material = 1; } /* For a material grid, we interpolate the point (in "object" coordinates) into the grid. More than that, however, we check if the same point intersects the *same* material grid from multiple objects -- if so, we take the product of the interpolated grid values. */ if (material.which_subclass == MATERIAL_GRID) { material_type mat_eps; mat_eps = make_dielectric( matgrid_val(p, tp, oi, material.subclass.material_grid_data) * (material.subclass.material_grid_data->epsilon_max - material.subclass.material_grid_data->epsilon_min) + material.subclass.material_grid_data->epsilon_min); if (destroy_material) material_type_destroy(material); material = mat_eps; destroy_material = 1; } material_eps(material, eps, eps_inv); if (destroy_material) material_type_destroy(material); } } static int variable_material(int which_subclass) { return (which_subclass == MATERIAL_GRID || which_subclass == MATERIAL_FUNCTION); } static int mean_epsilon_func(symmetric_matrix *meps, symmetric_matrix *meps_inv, real n[3], real d1, real d2, real d3, real tol, const real r[3], void *edata) { epsilon_func_data *d = (epsilon_func_data *) edata; vector3 p; const geometric_object *o1 = 0, *o2 = 0; vector3 shiftby1, shiftby2, normal; geom_box pixel; double fill; material_type mat1, mat2; int id1 = -1, id2 = -1; int i; const int num_neighbors[3] = { 3, 5, 9 }; const int neighbors[3][9][3] = { { {0,0,0}, {-1,0,0}, {1,0,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0} }, { {0,0,0}, {-1,-1,0}, {1,1,0}, {-1,1,0}, {1,-1,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0} }, { {0,0,0}, {1,1,1},{1,1,-1},{1,-1,1},{1,-1,-1}, {-1,1,1},{-1,1,-1},{-1,-1,1},{-1,-1,-1} } }; /* p needs to be in the lattice *unit* vector basis, while r is in the lattice vector basis. Also, shift origin to the center of the grid. */ p.x = no_size_x ? 0 : (r[0] - 0.5) * geometry_lattice.size.x; p.y = no_size_y ? 0 : (r[1] - 0.5) * geometry_lattice.size.y; p.z = no_size_z ? 0 : (r[2] - 0.5) * geometry_lattice.size.z; d1 *= no_size_x ? 0 : geometry_lattice.size.x * 0.5; d2 *= no_size_y ? 0 : geometry_lattice.size.y * 0.5; d3 *= no_size_z ? 0 : geometry_lattice.size.z * 0.5; #if 0 /* no averaging */ epsilon_func(meps, meps_inv, r, edata); n[0] = n[1] = n[2] = 0; return 1; #endif for (i = 0; i < num_neighbors[dimensions - 1]; ++i) { const geometric_object *o; material_type mat; vector3 q, z, shiftby; int id; q.x = p.x + neighbors[dimensions - 1][i][0] * d1; q.y = p.y + neighbors[dimensions - 1][i][1] * d2; q.z = p.z + neighbors[dimensions - 1][i][2] * d3; z = shift_to_unit_cell(q); o = object_of_point_in_tree(z, geometry_tree, &shiftby, &id); shiftby = vector3_plus(shiftby, vector3_minus(q, z)); if ((id == id1 && vector3_equal(shiftby, shiftby1)) || (id == id2 && vector3_equal(shiftby, shiftby2))) continue; mat = (o && o->material.which_subclass != MATERIAL_TYPE_SELF) ? o->material : default_material; if (id1 == -1) { o1 = o; shiftby1 = shiftby; id1 = id; mat1 = mat; } else if (id2 == -1 || ((id >= id1 && id >= id2) && (id1 == id2 || material_type_equal(&mat1,&mat2)))) { o2 = o; shiftby2 = shiftby; id2 = id; mat2 = mat; } else if (!(id1 < id2 && (id1 == id || material_type_equal(&mat1,&mat))) && !(id2 < id1 && (id2 == id || material_type_equal(&mat2,&mat)))) return 0; /* too many nearby objects for analysis */ } CHECK(id1 > -1, "bug in object_of_point_in_tree?"); if (id2 == -1) { /* only one nearby object/material */ id2 = id1; o2 = o1; mat2 = mat1; shiftby2 = shiftby1; } if ((o1 && variable_material(o1->material.which_subclass)) || (o2 && variable_material(o2->material.which_subclass)) || ((variable_material(default_material.which_subclass) || d->eps_file_func) && (!o1 || !o2 || o1->material.which_subclass == MATERIAL_TYPE_SELF || o2->material.which_subclass == MATERIAL_TYPE_SELF))) return 0; /* arbitrary material functions are non-analyzable */ material_eps(mat1, meps, meps_inv); /* check for trivial case of only one object/material */ if (id1 == id2 || material_type_equal(&mat1, &mat2)) { n[0] = n[1] = n[2] = 0; return 1; } if (id1 > id2) normal = normal_to_fixed_object(vector3_minus(p, shiftby1), *o1); else normal = normal_to_fixed_object(vector3_minus(p, shiftby2), *o2); n[0] = no_size_x ? 0 : normal.x / geometry_lattice.size.x; n[1] = no_size_y ? 0 : normal.y / geometry_lattice.size.y; n[2] = no_size_z ? 0 : normal.z / geometry_lattice.size.z; pixel.low.x = p.x - d1; pixel.high.x = p.x + d1; pixel.low.y = p.y - d2; pixel.high.y = p.y + d2; pixel.low.z = p.z - d3; pixel.high.z = p.z + d3; tol = tol > 0.01 ? 0.01 : tol; if (id1 > id2) { pixel.low = vector3_minus(pixel.low, shiftby1); pixel.high = vector3_minus(pixel.high, shiftby1); fill = box_overlap_with_object(pixel, *o1, tol, 100/tol); } else { pixel.low = vector3_minus(pixel.low, shiftby2); pixel.high = vector3_minus(pixel.high, shiftby2); fill = 1 - box_overlap_with_object(pixel, *o2, tol, 100/tol); } { symmetric_matrix eps2, epsinv2; #ifdef KOTTKE /* new anisotropic smoothing, based on Kottke algorithm */ symmetric_matrix eps1, delta; double Rot[3][3], norm, n0, n1, n2; material_eps(mat2, &eps2, &epsinv2); eps1 = *meps; /* make Cartesian orthonormal frame relative to interface */ n0 = R[0][0] * n[0] + R[1][0] * n[1] + R[2][0] * n[2]; n1 = R[0][1] * n[0] + R[1][1] * n[1] + R[2][1] * n[2]; n2 = R[0][2] * n[0] + R[1][2] * n[1] + R[2][2] * n[2]; norm = sqrt(n0*n0 + n1*n1 + n2*n2); if (norm == 0.0) return 0; norm = 1.0 / norm; Rot[0][0] = n0 = n0 * norm; Rot[1][0] = n1 = n1 * norm; Rot[2][0] = n2 = n2 * norm; if (fabs(n0) > 1e-2 || fabs(n1) > 1e-2) { /* (z x n) */ Rot[0][2] = n1; Rot[1][2] = -n0; Rot[2][2] = 0; } else { /* n is ~ parallel to z direction, use (x x n) instead */ Rot[0][2] = 0; Rot[1][2] = -n2; Rot[2][2] = n1; } { /* normalize second column */ double s = Rot[0][2]*Rot[0][2]+Rot[1][2]*Rot[1][2]+Rot[2][2]*Rot[2][2]; s = 1.0 / sqrt(s); Rot[0][2] *= s; Rot[1][2] *= s; Rot[2][2] *= s; } /* 1st column is 2nd column x 0th column */ Rot[0][1] = Rot[1][2] * Rot[2][0] - Rot[2][2] * Rot[1][0]; Rot[1][1] = Rot[2][2] * Rot[0][0] - Rot[0][2] * Rot[2][0]; Rot[2][1] = Rot[0][2] * Rot[1][0] - Rot[1][2] * Rot[0][0]; /* rotate epsilon tensors to surface parallel/perpendicular axes */ maxwell_sym_matrix_rotate(&eps1, &eps1, Rot); maxwell_sym_matrix_rotate(&eps2, &eps2, Rot); #define AVG (fill * (EXPR(eps1)) + (1-fill) * (EXPR(eps2))) #define EXPR(eps) (-1 / eps.m00) delta.m00 = AVG; #undef EXPR #define EXPR(eps) (eps.m11 - ESCALAR_NORMSQR(eps.m01) / eps.m00) delta.m11 = AVG; #undef EXPR #define EXPR(eps) (eps.m22 - ESCALAR_NORMSQR(eps.m02) / eps.m00) delta.m22 = AVG; #undef EXPR #define EXPR(eps) (ESCALAR_RE(eps.m01) / eps.m00) ESCALAR_RE(delta.m01) = AVG; #undef EXPR #define EXPR(eps) (ESCALAR_RE(eps.m02) / eps.m00) ESCALAR_RE(delta.m02) = AVG; #undef EXPR #define EXPR(eps) (ESCALAR_RE(eps.m12) - ESCALAR_MULT_CONJ_RE(eps.m02, eps.m01) / eps.m00) ESCALAR_RE(delta.m12) = AVG; #undef EXPR #ifdef WITH_HERMITIAN_EPSILON # define EXPR(eps) (ESCALAR_IM(eps.m01) / eps.m00) ESCALAR_IM(delta.m01) = AVG; # undef EXPR # define EXPR(eps) (ESCALAR_IM(eps.m02) / eps.m00) ESCALAR_IM(delta.m02) = AVG; # undef EXPR # define EXPR(eps) (ESCALAR_IM(eps.m12) - ESCALAR_MULT_CONJ_IM(eps.m02, eps.m01) / eps.m00) ESCALAR_IM(delta.m12) = AVG; # undef EXPR #endif /* WITH_HERMITIAN_EPSILON */ meps->m00 = -1/delta.m00; meps->m11 = delta.m11 - ESCALAR_NORMSQR(delta.m01) / delta.m00; meps->m22 = delta.m22 - ESCALAR_NORMSQR(delta.m02) / delta.m00; ASSIGN_ESCALAR(meps->m01, -ESCALAR_RE(delta.m01)/delta.m00, -ESCALAR_IM(delta.m01)/delta.m00); ASSIGN_ESCALAR(meps->m02, -ESCALAR_RE(delta.m02)/delta.m00, -ESCALAR_IM(delta.m02)/delta.m00); ASSIGN_ESCALAR(meps->m12, ESCALAR_RE(delta.m12) - ESCALAR_MULT_CONJ_RE(delta.m02, delta.m01)/delta.m00, ESCALAR_IM(delta.m12) - ESCALAR_MULT_CONJ_IM(delta.m02, delta.m01)/delta.m00); #define SWAP(a,b) { double xxx = a; a = b; b = xxx; } /* invert rotation matrix = transpose */ SWAP(Rot[0][1], Rot[1][0]); SWAP(Rot[0][2], Rot[2][0]); SWAP(Rot[2][1], Rot[1][2]); maxwell_sym_matrix_rotate(meps, meps, Rot); /* rotate back */ #undef SWAP # ifdef DEBUG CHECK(negative_epsilon_okp || maxwell_sym_matrix_positive_definite(meps), "negative mean epsilon from Kottke algorithm"); # endif #else /* !KOTTKE, just compute mean epsilon and mean inverse epsilon */ material_eps(mat2, &eps2, &epsinv2); meps->m00 = fill * (meps->m00 - eps2.m00) + eps2.m00; meps->m11 = fill * (meps->m11 - eps2.m11) + eps2.m11; meps->m22 = fill * (meps->m22 - eps2.m22) + eps2.m22; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_SCALAR(meps->m01, fill * (CSCALAR_RE(meps->m01) - CSCALAR_RE(eps2.m01)) + CSCALAR_RE(eps2.m01), fill * (CSCALAR_IM(meps->m01) - CSCALAR_IM(eps2.m01)) + CSCALAR_IM(eps2.m01)); CASSIGN_SCALAR(meps->m02, fill * (CSCALAR_RE(meps->m02) - CSCALAR_RE(eps2.m02)) + CSCALAR_RE(eps2.m02), fill * (CSCALAR_IM(meps->m02) - CSCALAR_IM(eps2.m02)) + CSCALAR_IM(eps2.m02)); CASSIGN_SCALAR(meps->m12, fill * (CSCALAR_RE(meps->m12) - CSCALAR_RE(eps2.m12)) + CSCALAR_RE(eps2.m12), fill * (CSCALAR_IM(meps->m12) - CSCALAR_IM(eps2.m12)) + CSCALAR_IM(eps2.m12)); #else meps->m01 = fill * (meps->m01 - eps2.m01) + eps2.m01; meps->m02 = fill * (meps->m02 - eps2.m02) + eps2.m02; meps->m12 = fill * (meps->m12 - eps2.m12) + eps2.m12; #endif meps_inv->m00 = fill * (meps_inv->m00 - epsinv2.m00) + epsinv2.m00; meps_inv->m11 = fill * (meps_inv->m11 - epsinv2.m11) + epsinv2.m11; meps_inv->m22 = fill * (meps_inv->m22 - epsinv2.m22) + epsinv2.m22; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_SCALAR(meps_inv->m01, fill * (CSCALAR_RE(meps_inv->m01) - CSCALAR_RE(epsinv2.m01)) + CSCALAR_RE(epsinv2.m01), fill * (CSCALAR_IM(meps_inv->m01) - CSCALAR_IM(epsinv2.m01)) + CSCALAR_IM(epsinv2.m01)); CASSIGN_SCALAR(meps_inv->m02, fill * (CSCALAR_RE(meps_inv->m02) - CSCALAR_RE(epsinv2.m02)) + CSCALAR_RE(epsinv2.m02), fill * (CSCALAR_IM(meps_inv->m02) - CSCALAR_IM(epsinv2.m02)) + CSCALAR_IM(epsinv2.m02)); CASSIGN_SCALAR(meps_inv->m12, fill * (CSCALAR_RE(meps_inv->m12) - CSCALAR_RE(epsinv2.m12)) + CSCALAR_RE(epsinv2.m12), fill * (CSCALAR_IM(meps_inv->m12) - CSCALAR_IM(epsinv2.m12)) + CSCALAR_IM(epsinv2.m12)); #else meps_inv->m01 = fill * (meps_inv->m01 - epsinv2.m01) + epsinv2.m01; meps_inv->m02 = fill * (meps_inv->m02 - epsinv2.m02) + epsinv2.m02; meps_inv->m12 = fill * (meps_inv->m12 - epsinv2.m12) + epsinv2.m12; #endif #endif } return 1; } /**************************************************************************/ void reset_epsilon(void) { epsilon_func_data d; int mesh[3]; mesh[0] = mesh_size; mesh[1] = (dimensions > 1) ? mesh_size : 1; mesh[2] = (dimensions > 2) ? mesh_size : 1; get_epsilon_file_func(epsilon_input_file, &d.eps_file_func, &d.eps_file_func_data); set_maxwell_dielectric(mdata, mesh, R, G, epsilon_func, mean_epsilon_func, &d); destroy_epsilon_file_func_data(d.eps_file_func_data); } /* Initialize the dielectric function of the global mdata structure, along with other geometry data. Should be called from init-params, or in general when global input vars have been loaded and mdata allocated. */ void init_epsilon(void) { int i; int tree_depth, tree_nobjects; number no_size; no_size = 2.0 / ctl_get_number("infinity"); mpi_one_printf("Mesh size is %d.\n", mesh_size); no_size_x = geometry_lattice.size.x <= no_size; no_size_y = geometry_lattice.size.y <= no_size || dimensions < 2; no_size_z = geometry_lattice.size.z <= no_size || dimensions < 3; Rm.c0 = vector3_scale(no_size_x ? 1 : geometry_lattice.size.x, geometry_lattice.basis.c0); Rm.c1 = vector3_scale(no_size_y ? 1 : geometry_lattice.size.y, geometry_lattice.basis.c1); Rm.c2 = vector3_scale(no_size_z ? 1 : geometry_lattice.size.z, geometry_lattice.basis.c2); mpi_one_printf("Lattice vectors:\n"); mpi_one_printf(" (%g, %g, %g)\n", Rm.c0.x, Rm.c0.y, Rm.c0.z); mpi_one_printf(" (%g, %g, %g)\n", Rm.c1.x, Rm.c1.y, Rm.c1.z); mpi_one_printf(" (%g, %g, %g)\n", Rm.c2.x, Rm.c2.y, Rm.c2.z); Vol = fabs(matrix3x3_determinant(Rm)); mpi_one_printf("Cell volume = %g\n", Vol); Gm = matrix3x3_inverse(matrix3x3_transpose(Rm)); mpi_one_printf("Reciprocal lattice vectors (/ 2 pi):\n"); mpi_one_printf(" (%g, %g, %g)\n", Gm.c0.x, Gm.c0.y, Gm.c0.z); mpi_one_printf(" (%g, %g, %g)\n", Gm.c1.x, Gm.c1.y, Gm.c1.z); mpi_one_printf(" (%g, %g, %g)\n", Gm.c2.x, Gm.c2.y, Gm.c2.z); if (eigensolver_nwork > MAX_NWORK) { mpi_one_printf("(Reducing nwork = %d to maximum: %d.)\n", eigensolver_nwork, MAX_NWORK); eigensolver_nwork = MAX_NWORK; } matrix3x3_to_arr(R, Rm); matrix3x3_to_arr(G, Gm); /* we must do this to correct for a non-orthogonal lattice basis: */ geom_fix_objects(); mpi_one_printf("Geometric objects:\n"); if (mpi_is_master()) for (i = 0; i < geometry.num_items; ++i) { display_geometric_object_info(5, geometry.items[i]); if (geometry.items[i].material.which_subclass == DIELECTRIC) printf("%*sdielectric constant epsilon = %g\n", 5 + 5, "", geometry.items[i].material. subclass.dielectric_data->epsilon); } destroy_geom_box_tree(geometry_tree); /* destroy any tree from previous runs */ { geom_box b0; b0.low = vector3_plus(geometry_center, vector3_scale(-0.5, geometry_lattice.size)); b0.high = vector3_plus(geometry_center, vector3_scale(0.5, geometry_lattice.size)); /* pad tree boundaries to allow for sub-pixel averaging */ b0.low.x -= geometry_lattice.size.x / mdata->nx; b0.low.y -= geometry_lattice.size.y / mdata->ny; b0.low.z -= geometry_lattice.size.z / mdata->nz; b0.high.x += geometry_lattice.size.x / mdata->nx; b0.high.y += geometry_lattice.size.y / mdata->ny; b0.high.z += geometry_lattice.size.z / mdata->nz; geometry_tree = create_geom_box_tree0(geometry, b0); } if (verbose && mpi_is_master()) { printf("Geometry object bounding box tree:\n"); display_geom_box_tree(5, geometry_tree); } geom_box_tree_stats(geometry_tree, &tree_depth, &tree_nobjects); mpi_one_printf("Geometric object tree has depth %d and %d object nodes" " (vs. %d actual objects)\n", tree_depth, tree_nobjects, geometry.num_items); mpi_one_printf("Initializing dielectric function...\n"); reset_epsilon(); } mpb-1.5/mpb/epsilon_file.c0000644000175400001440000001321112315341423012444 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /**************************************************************************/ /* This file defines functions to initialize the dielectric function by reading epsilon values from a file, rather than using the geometry. Actually, we would like to use the geometry in addition to the epsilon file, for added flexibility. So, we return an epsilon function that can be used when no geometric objects are found. */ /**************************************************************************/ #include #include #include #include "config.h" #include #include #include #include #include #include #include "mpb.h" typedef struct { int nx, ny, nz; real *data; } epsilon_file_data; /* Linearly interpolate a given point in a 3d grid of data. The point coordinates should be in the range [0,1], or at the very least [-1,2] ... anything outside [0,1] is *mirror* reflected into [0,1] */ real linear_interpolate(real rx, real ry, real rz, real *data, int nx, int ny, int nz, int stride) { int x, y, z, x2, y2, z2; real dx, dy, dz; /* mirror boundary conditions for r just beyond the boundary */ if (rx < 0.0) rx = -rx; else if (rx > 1.0) rx = 1.0 - rx; if (ry < 0.0) ry = -ry; else if (ry > 1.0) ry = 1.0 - ry; if (rz < 0.0) rz = -rz; else if (rz > 1.0) rz = 1.0 - rz; /* get the point corresponding to r in the epsilon array grid: */ x = rx * nx; if (x == nx) --x; y = ry * ny; if (y == ny) --y; z = rz * nz; if (z == nz) --z; /* get the difference between (x,y,z) and the actual point ... we shift by 0.5 to center the data points in the pixels */ dx = rx * nx - x - 0.5; dy = ry * ny - y - 0.5; dz = rz * nz - z - 0.5; /* get the other closest point in the grid, with mirror boundaries: */ x2 = (dx >= 0.0 ? x + 1 : x - 1); if (x2 < 0) x2++; else if (x2 == nx) x2--; y2 = (dy >= 0.0 ? y + 1 : y - 1); if (y2 < 0) y2++; else if (y2 == ny) y2--; z2 = (dz >= 0.0 ? z + 1 : z - 1); if (z2 < 0) z2++; else if (z2 == nz) z2--; /* take abs(d{xyz}) to get weights for {xyz} and {xyz}2: */ dx = fabs(dx); dy = fabs(dy); dz = fabs(dz); /* define a macro to give us data(x,y,z) on the grid, in row-major order (the order used by HDF5): */ #define D(x,y,z) (data[(((x)*ny + (y))*nz + (z)) * stride]) return(((D(x,y,z)*(1.0-dx) + D(x2,y,z)*dx) * (1.0-dy) + (D(x,y2,z)*(1.0-dx) + D(x2,y2,z)*dx) * dy) * (1.0-dz) + ((D(x,y,z2)*(1.0-dx) + D(x2,y,z2)*dx) * (1.0-dy) + (D(x,y2,z2)*(1.0-dx) + D(x2,y2,z2)*dx) * dy) * dz); #undef D } static void epsilon_file_func(symmetric_matrix *eps, symmetric_matrix *eps_inv, const real r[3], void *edata) { epsilon_file_data *d = (epsilon_file_data *) edata; real rx, ry, rz; real eps_val; /* make sure r is positive: */ rx = r[0] >= 0.0 ? r[0] : (r[0] + (1 + (int) (-r[0]))); ry = r[1] >= 0.0 ? r[1] : (r[1] + (1 + (int) (-r[1]))); rz = r[2] >= 0.0 ? r[2] : (r[2] + (1 + (int) (-r[2]))); /* make sure r is in [0,1) */ rx = rx < 1.0 ? rx : rx - ((int) rx); ry = ry < 1.0 ? ry : ry - ((int) ry); rz = rz < 1.0 ? rz : rz - ((int) rz); eps_val = linear_interpolate(rx,ry,rz, d->data, d->nx,d->ny,d->nz, 1); eps->m00 = eps->m11 = eps->m22 = eps_val; eps_inv->m00 = eps_inv->m11 = eps_inv->m22 = 1.0 / eps_val; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_ZERO(eps->m01); CASSIGN_ZERO(eps->m02); CASSIGN_ZERO(eps->m12); CASSIGN_ZERO(eps_inv->m01); CASSIGN_ZERO(eps_inv->m02); CASSIGN_ZERO(eps_inv->m12); #else eps->m01 = eps->m02 = eps->m12 = 0.0; eps_inv->m01 = eps_inv->m02 = eps_inv->m12 = 0.0; #endif } void get_epsilon_file_func(const char *fname, maxwell_dielectric_function *func, void **func_data) { if (fname && fname[0]) { char *eps_fname; matrixio_id file_id; epsilon_file_data *d; int rank = 3, dims[3]; CHK_MALLOC(d, epsilon_file_data, 1); eps_fname = ctl_fix_path(fname); mpi_one_printf("Using background dielectric from file \"%s\"...\n", eps_fname); file_id = matrixio_open(eps_fname, 1); free(eps_fname); d->data = matrixio_read_real_data(file_id, NULL, &rank, dims, 0,0,0, NULL); CHECK(d->data, "couldn't find dataset in dielectric file"); matrixio_close(file_id); d->nx = rank >= 1 ? dims[0] : 1; d->ny = rank >= 2 ? dims[1] : 1; d->nz = rank >= 3 ? dims[2] : 1; mpi_one_printf(" ...read %dx%dx%d dielectric function\n", d->nx, d->ny, d->nz); *func = epsilon_file_func; *func_data = (void*) d; } else { *func = NULL; *func_data = NULL; } } void destroy_epsilon_file_func_data(void *func_data) { epsilon_file_data *d = (epsilon_file_data *) func_data; if (d) { free(d->data); free(d); } } mpb-1.5/mpb/mpb-split.10000644000175400001440000000610412315341423011624 00000000000000.\" Copyright (C) 1999-2014 Massachusetts Institute of Technology. .\" .\" 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 .\" .TH MPB 1 "March 13, 2002" "MPB" "MIT Photonic-Bands Package" .SH NAME mpb-split \- compute eigenmodes with MPB using multiple processes .SH SYNOPSIS .B mpb-split \fINUM-SPLIT\fR [\fIDEFINITION\fR]... [\fICTLFILE\fR]... .SH DESCRIPTION .PP ." Add any additional description here mpb-split is a parallelizing front-end to MIT Photonic Bands (MPB). For a computation with several k points, it splits the list of k points over multiple processes. Of course, this will only benefit you on a system where different processes will run on different processors, such as an SMP or a cluster with automatic process migration (e.g. MOSIX). mpb-split is actually a trivial shell script, though, so you can easily modify it if you need to use a special command to launch processes on other processors/machines. MIT Photonic Bands (MPB) is a free program to compute the band structures (dispersion relations) and electromagnetic modes of periodic dielectric structures, and is applicable both to photonic crystals (photonic band-gap materials) and a wide range of other optical problems. .PP More information on MPB, including a detailed manual, can be found online at the MPB home page: .I http://ab-initio.mit.edu/mpb/ .PP A typical invocation of .I mpb-split looks like: .PP .Vb 1 \& mpb-split num-split foo.ctl >& foo.out .Ve .PP This causes .I mpb-split to process the control file foo.ctl, divide the k points into . B num-split equal chunks, run each list in a separate process with MPB, and redirect the output (in order) to foo.out. (One typically redirects output to a file, as the output is verbose and contains a number of comma-delimited datasets that one can extract by grepping.) .PP Overall, the behavior and arguments are the same as for .I mpb except that the first argument must be the integer \fBnum-split\fR. .PP What .I mpb-split technically does is to set the MPB variable k-split-num to .B num-split and k-split-index to the index (starting with 0) of the chunk for each process. If you want, you can use these variables to divide the problem in some other way and then reset them to 1 and 0, respectively. .SH BUGS Send bug reports to S. G. Johnson, stevenj@alum.mit.edu. .SH AUTHORS Written by Steven G. Johnson. Copyright (c) 1999-2012 by the Massachusetts Institute of Technology. .SH "SEE ALSO" mpb(1), mpb-data(1) mpb-1.5/mpb/mpb.10000644000175400001440000000663712315341423010506 00000000000000.\" Copyright (C) 1999-2014 Massachusetts Institute of Technology. .\" .\" 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 .\" .TH MPB 1 "January 27, 2000" "MPB" "MIT Photonic-Bands Package" .SH NAME mpb \- compute eigenmodes of periodic dielectric structures .SH SYNOPSIS .B mpb [\fIOPTION\fR]... [\fIDEFINITION\fR]... [\fICTLFILE\fR]... .SH DESCRIPTION .PP ." Add any additional description here MIT Photonic Bands (MPB) is a free program to compute the band structures (dispersion relations) and electromagnetic modes of periodic dielectric structures, and is applicable both to photonic crystals (photonic band-gap materials) and a wide range of other optical problems. Its features include: fully-vectorial, 3D computations; a flexible user-interface based upon the GNU Guile scripting language; output in HDF format; and iterative, targeted eigensolver methods to address very large problems by solving for only a few states near a specified frequency. .PP More information on MPB, including a detailed manual, can be found online at the MPB home page: .I http://ab-initio.mit.edu/mpb/ .PP A typical invocation of MPB looks like: .PP .Vb 1 \& mpb foo.ctl >& foo.out .Ve .PP This causes MPB to process the control file foo.ctl and redirect its output to foo.out. (One typically redirects output to a file, as the output is verbose and contains a number of comma-delimited datasets that one can extract by grepping.) .PP You can also use MPB in an interactive mode, in which you can type in MPB commands (in Scheme/Guile) and immediately see their results. Interactive mode is entered when you invoke .I mpb with no control files, or if your control files don't contain any .I run statements (which disable interactive mode), or if the last control file ends by setting .I (set! interactive? true) in which case interactive mode is entered after the control files execute. .PP Another useful feature is that you can alter parameters in your control files from the command line, by including definitions of the form \fIvariable\fR=\fIvalue\fR as arguments to .I mpb (before the control files). This overrides the values of variables defined with .I define-param in the control file (including all of the predefined MPB input variables). .PP Multiple control files and definitions are executed in sequence, in the order they are specified on the command line. .SH OPTIONS .TP \fB\-h\fR, \fB\--help\fR Display help on the command-line options and usage. .TP \fB\-V\fR, \fB\--version\fR Print the version number and copyright info for mpb. .TP \fB\-v\fR, \fB\--verbose\fR Verbose output. .SH BUGS Send bug reports to S. G. Johnson, stevenj@alum.mit.edu. .SH AUTHORS Written by Steven G. Johnson. Copyright (c) 1999-2012 by the Massachusetts Institute of Technology. .SH "SEE ALSO" mpb-split(1), mpb-data(1) mpb-1.5/mpb/field-smob.c0000644000175400001440000004200212315341423012015 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include "config.h" #include #include #include #include "field-smob.h" #include "mpb.h" #ifndef HAVE_SCM_MAKE_SMOB_TYPE /* null mark function, for smobs containing no SCM objects */ static SCM mark_null(SCM obj) { (void) obj; return SCM_BOOL_F; } #endif /*************************************************************************/ long scm_tc16_smob_field_smob = 0; static SCM field_p(SCM obj) { return ctl_convert_boolean_to_scm(FIELD_P(obj)); } static SCM rscalar_field_p(SCM obj) { return ctl_convert_boolean_to_scm(RSCALAR_FIELD_P(obj)); } static SCM cscalar_field_p(SCM obj) { return ctl_convert_boolean_to_scm(CSCALAR_FIELD_P(obj)); } static SCM cvector_field_p(SCM obj) { return ctl_convert_boolean_to_scm(CVECTOR_FIELD_P(obj)); } static int print_field_smob(SCM obj, SCM port, scm_print_state *pstate) { char buf[256]; field_smob *pf = FIELD(obj); (void) pstate; /* unused argument */ scm_puts("#nx, pf->ny, pf->nz); scm_puts(buf, port); switch (pf->type) { case RSCALAR_FIELD_SMOB: scm_puts(" real scalar field", port); break; case CSCALAR_FIELD_SMOB: scm_puts(" complex scalar field", port); break; case CVECTOR_FIELD_SMOB: scm_puts(" complex vector field", port); break; } if (pf->local_ny < pf->ny) { sprintf(buf, ", y=%d-%d local", pf->local_y_start, pf->local_y_start + pf->local_ny - 1); scm_puts(buf, port); } scm_putc('>', port); return 1; } static size_t free_field_smob(SCM obj) { field_smob *pf = FIELD(obj); free(pf->f.rs); free(pf); return 0; } #define mark_field_smob mark_null SCM field2scm(field_smob *pf) { SCM obj; NEWCELL_SMOB(obj, field_smob, pf); return obj; } /*************************************************************************/ void register_field_smobs(void) { #ifdef HAVE_SCM_MAKE_SMOB_TYPE scm_tc16_smob_field_smob = scm_make_smob_type("field", 0); scm_set_smob_free(scm_tc16_smob_field_smob, free_field_smob); scm_set_smob_print(scm_tc16_smob_field_smob, print_field_smob); #else /* old way to register smobs */ MAKE_SMOBFUNS(field_smob); REGISTER_SMOBFUNS(field_smob); #endif gh_new_procedure("field?", field_p, 1, 0, 0); gh_new_procedure("rscalar-field?", rscalar_field_p, 1, 0, 0); gh_new_procedure("cscalar-field?", cscalar_field_p, 1, 0, 0); gh_new_procedure("cvector-field?", cvector_field_p, 1, 0, 0); } /*************************************************************************/ static field_smob curfield_smob; field_smob *update_curfield_smob(void) { CHECK(mdata, "init-params must be called before manipulating fields"); curfield_smob.nx = mdata->nx; curfield_smob.ny = mdata->ny; curfield_smob.nz = mdata->nz; curfield_smob.N = mdata->fft_output_size; curfield_smob.local_ny = mdata->local_ny; curfield_smob.local_y_start = mdata->local_y_start; curfield_smob.last_dim = mdata->last_dim; curfield_smob.last_dim_size = mdata->last_dim_size; curfield_smob.other_dims = mdata->other_dims; curfield_smob.type_char = curfield_type; if (strchr("dhecv", curfield_type)) { /* complex vector field */ curfield_smob.type = CVECTOR_FIELD_SMOB; curfield_smob.f.cv = curfield; } else if (strchr("DHnR", curfield_type)) { /* real scalar field */ curfield_smob.type = RSCALAR_FIELD_SMOB; curfield_smob.f.rs = (real *) curfield; } else if (strchr("C", curfield_type)) { /* complex scalar field */ curfield_smob.type = CSCALAR_FIELD_SMOB; curfield_smob.f.cs = curfield; } else { curfield_smob.type = RSCALAR_FIELD_SMOB; /* arbitrary */ curfield_smob.f.rs = (real *) curfield; if (!curfield_smob.f.rs) curfield_smob.f.rs = (real *) mdata->fft_data; return 0; } return &curfield_smob; } static void update_curfield(field_smob *pf) { if (pf == &curfield_smob) { curfield_type = curfield_smob.type_char; curfield = curfield_smob.f.cv; } } boolean cur_fieldp(SCM obj) { if (SCM_NIMP(obj) && SCM_SYMBOLP(obj)) { char *s = ctl_symbol2newstr(obj); int ret = !strcmp(s, "cur-field"); free(s); return ret; } return 0; } /*************************************************************************/ field_smob *assert_field_smob(SCM fo) { field_smob *f = SAFE_FIELD(fo); CHECK(f, "wrong type argument: expecting field"); return f; } /*************************************************************************/ SCM rscalar_field_make(SCM f0) { int i; field_smob *pf; field_smob *pf0 = assert_field_smob(f0); CHK_MALLOC(pf, field_smob, 1); *pf = *pf0; pf->type = RSCALAR_FIELD_SMOB; pf->type_char = 'R'; CHK_MALLOC(pf->f.rs, real, pf->N); for (i = 0; i < pf->N; ++i) pf->f.rs[i] = 0.0; return field2scm(pf); } SCM cscalar_field_make(SCM f0) { int i; field_smob *pf; field_smob *pf0 = assert_field_smob(f0); CHK_MALLOC(pf, field_smob, 1); *pf = *pf0; pf->type = CSCALAR_FIELD_SMOB; pf->type_char = 'C'; CHK_MALLOC(pf->f.cs, scalar_complex, pf->N); for (i = 0; i < pf->N; ++i) CASSIGN_ZERO(pf->f.cs[i]); return field2scm(pf); } SCM cvector_field_make(SCM f0) { int i; field_smob *pf; field_smob *pf0 = assert_field_smob(f0); CHECK(mdata, "init-params must be called before cvector-field-make"); CHK_MALLOC(pf, field_smob, 1); *pf = *pf0; pf->type = CVECTOR_FIELD_SMOB; pf->type_char = 'c'; CHK_MALLOC(pf->f.cv, scalar_complex, 3 * pf->N); for (i = 0; i < pf->N * 3; ++i) CASSIGN_ZERO(pf->f.cv[i]); return field2scm(pf); } void cvector_field_nonblochB(SCM f) { field_smob *pf = assert_field_smob(f); pf->type_char = 'v'; update_curfield(pf); } SCM field_make(SCM f0) { field_smob *pf0 = assert_field_smob(f0); switch (pf0->type) { case RSCALAR_FIELD_SMOB: return rscalar_field_make(f0); case CSCALAR_FIELD_SMOB: return cscalar_field_make(f0); case CVECTOR_FIELD_SMOB: return cvector_field_make(f0); } return SCM_UNDEFINED; } static boolean fields_conform(field_smob *f1, field_smob *f2) { #define EQF(field) (f1->field == f2->field) return (EQF(nx) && EQF(ny) && EQF(nz) && EQF(N) && EQF(local_ny) && EQF(local_y_start) && EQF(last_dim) && EQF(last_dim_size) && EQF(other_dims)); #undef EQF } boolean fields_conformp(SCM f1o, SCM f2o) { field_smob *f1 = assert_field_smob(f1o); field_smob *f2 = assert_field_smob(f2o); return fields_conform(f1, f2); } static void field_set(field_smob *fd, field_smob *fs) { int i; CHECK(fd->type == fs->type && fields_conform(fd, fs), "fields for field-set! must conform"); switch (fs->type) { case RSCALAR_FIELD_SMOB: CHECK(fs->type_char != '-', "must load field for field-set!"); for (i = 0; i < fs->N; ++i) fd->f.rs[i] = fs->f.rs[i]; break; case CSCALAR_FIELD_SMOB: CHECK(fs->type_char != '-', "must load field for field-set!"); for (i = 0; i < fs->N; ++i) fd->f.cs[i] = fs->f.cs[i]; break; case CVECTOR_FIELD_SMOB: CHECK(fs->type_char != '-', "must load field for field-set!"); for (i = 0; i < fs->N * 3; ++i) fd->f.cv[i] = fs->f.cv[i]; break; } fd->type_char = fs->type_char; update_curfield(fd); } void field_setB(SCM dest, SCM src) { field_smob *fd = assert_field_smob(dest); field_smob *fs = assert_field_smob(src); field_set(fd, fs); } void field_load(SCM src) { field_smob *fs = assert_field_smob(src); CHECK(mdata, "init-params must be called before field-load"); update_curfield_smob(); CHECK(fields_conform(fs, &curfield_smob), "argument for field-load must conform to current size"); curfield_smob.type = fs->type; field_set(&curfield_smob, fs); } void field_mapLB(SCM dest, function f, SCM_list src) { field_smob *pd = assert_field_smob(dest); field_smob **ps; int i, j; CHK_MALLOC(ps, field_smob *, src.num_items); for (j = 0; j < src.num_items; ++j) { ps[j] = assert_field_smob(src.items[j]); CHECK(fields_conform(pd, ps[j]), "fields for field-map! must conform"); } for (i = 0; i < pd->N; ++i) { list arg_list = SCM_EOL; SCM result; for (j = src.num_items - 1; j >= 0; --j) { SCM item = SCM_EOL; switch (ps[j]->type) { case RSCALAR_FIELD_SMOB: item = ctl_convert_number_to_scm(ps[j]->f.rs[i]); break; case CSCALAR_FIELD_SMOB: item = cnumber2scm(cscalar2cnumber(ps[j]->f.cs[i])); break; case CVECTOR_FIELD_SMOB: item = cvector32scm(cscalar32cvector3(ps[j]->f.cv+3*i)); break; } arg_list = gh_cons(item, arg_list); } result = gh_apply(f, arg_list); switch (pd->type) { case RSCALAR_FIELD_SMOB: pd->f.rs[i] = ctl_convert_number_to_c(result); break; case CSCALAR_FIELD_SMOB: pd->f.cs[i] = cnumber2cscalar(scm2cnumber(result)); break; case CVECTOR_FIELD_SMOB: cvector32cscalar3(pd->f.cv+3*i, scm2cvector3(result)); break; } } if (src.num_items == 1 && ps[0]->type == pd->type) pd->type_char = ps[0]->type_char; else if (src.num_items > 1) switch (pd->type) { case RSCALAR_FIELD_SMOB: pd->type_char = 'R'; break; case CSCALAR_FIELD_SMOB: pd->type_char = 'C'; break; case CVECTOR_FIELD_SMOB: pd->type_char = 'c'; break; } free(ps); update_curfield(pd); } /*************************************************************************/ static cvector3 cvector3_conj(cvector3 c) { cvector3 cc; cc.x = cnumber_conj(c.x); cc.y = cnumber_conj(c.y); cc.z = cnumber_conj(c.z); return cc; } /* Compute the integral of f(r, {fields}) over the cell. */ cnumber integrate_fieldL(function f, SCM_list fields) { int i, j, k, n1, n2, n3, n_other, n_last, rank, last_dim; #ifdef HAVE_MPI int local_n2, local_y_start, local_n3; #endif real s1, s2, s3, c1, c2, c3; int ifield; field_smob **pf; cnumber integral = {0,0}; CHK_MALLOC(pf, field_smob *, fields.num_items); for (ifield = 0; ifield < fields.num_items; ++ifield) { pf[ifield] = assert_field_smob(fields.items[ifield]); CHECK(fields_conform(pf[0], pf[ifield]), "fields for integrate-fields must conform"); } if (fields.num_items > 0) { n1 = pf[0]->nx; n2 = pf[0]->ny; n3 = pf[0]->nz; n_other = pf[0]->other_dims; n_last = pf[0]->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); last_dim = pf[0]->last_dim; } else { n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; n_other = mdata->other_dims; n_last = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); last_dim = mdata->last_dim; } rank = (n3 == 1) ? (n2 == 1 ? 1 : 2) : 3; s1 = geometry_lattice.size.x / n1; s2 = geometry_lattice.size.y / n2; s3 = geometry_lattice.size.z / n3; c1 = n1 <= 1 ? 0 : geometry_lattice.size.x * 0.5; c2 = n2 <= 1 ? 0 : geometry_lattice.size.y * 0.5; c3 = n3 <= 1 ? 0 : geometry_lattice.size.z * 0.5; /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and "index" describing the corresponding index in the curfield array. This was all stolen from maxwell_eps.c...it would be better if we didn't have to cut and paste, sigh. */ #ifdef SCALAR_COMPLEX # ifndef HAVE_MPI for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j, k2 = k; int index = ((i * n2 + j) * n3 + k); # else /* HAVE_MPI */ if (fields.num_items > 0) { local_n2 = pf[0]->local_ny; local_y_start = pf[0]->local_y_start; } else { local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; } /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j + local_y_start, k2 = k; int index = ((j * n1 + i) * n3 + k); # endif /* HAVE_MPI */ #else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI for (i = 0; i < n_other; ++i) for (j = 0; j < n_last; ++j) { int index = i * n_last + j; int i2, j2, k2; switch (rank) { case 2: i2 = i; j2 = j; k2 = 0; break; case 3: i2 = i / n2; j2 = i % n2; k2 = j; break; default: i2 = j; j2 = k2 = 0; break; } # else /* HAVE_MPI */ if (fields.num_items > 0) { local_n2 = pf[0]->local_ny; local_y_start = pf[0]->local_y_start; } else { local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; } /* For a real->complex transform, the last dimension is cut in half. For a 2d transform, this is taken into account in local_ny already, but for a 3d transform we must compute the new n3: */ if (n3 > 1) { if (fields.num_items > 0) local_n3 = pf[0]->last_dim_size / 2; else local_n3 = mdata->last_dim_size / 2; } else local_n3 = 1; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < local_n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int index = ((j * n1 + i) * local_n3 + k); # endif /* HAVE_MPI */ #endif /* not SCALAR_COMPLEX */ { list arg_list = SCM_EOL; cnumber integrand; vector3 p; p.x = i2 * s1 - c1; p.y = j2 * s2 - c2; p.z = k2 * s3 - c3; for (ifield = fields.num_items - 1; ifield >= 0; --ifield) { SCM item = SCM_EOL; switch (pf[ifield]->type) { case RSCALAR_FIELD_SMOB: item = ctl_convert_number_to_scm(pf[ifield]->f.rs[index]); break; case CSCALAR_FIELD_SMOB: item = cnumber2scm(cscalar2cnumber( pf[ifield]->f.cs[index])); break; case CVECTOR_FIELD_SMOB: item = cvector32scm(cscalar32cvector3( pf[ifield]->f.cv+3*index)); break; } arg_list = gh_cons(item, arg_list); } arg_list = gh_cons(vector32scm(p), arg_list); integrand = ctl_convert_cnumber_to_c(gh_apply(f, arg_list)); integral.re += integrand.re; integral.im += integrand.im; #ifndef SCALAR_COMPLEX { int last_index; # ifdef HAVE_MPI if (n3 == 1) last_index = j + local_y_start; else last_index = k; # else last_index = j; # endif if (last_index != 0 && 2*last_index != last_dim) { int i2c, j2c, k2c; i2c = i2 ? (n1 - i2) : 0; j2c = j2 ? (n2 - j2) : 0; k2c = k2 ? (n3 - k2) : 0; p.x = i2c * s1 - c1; p.y = j2c * s2 - c2; p.z = k2c * s3 - c3; arg_list = SCM_EOL; for (ifield = fields.num_items - 1; ifield >= 0; --ifield) { SCM item = SCM_UNDEFINED; switch (pf[ifield]->type) { case RSCALAR_FIELD_SMOB: item = ctl_convert_number_to_scm( pf[ifield]->f.rs[index]); break; case CSCALAR_FIELD_SMOB: item = cnumber2scm(cscalar2cnumber( pf[ifield]->f.cs[index])); break; case CVECTOR_FIELD_SMOB: item = cvector32scm( cvector3_conj(cscalar32cvector3( pf[ifield]->f.cv+3*index))); break; } arg_list = gh_cons(item, arg_list); } arg_list = gh_cons(vector32scm(p), arg_list); integrand = ctl_convert_cnumber_to_c(gh_apply(f, arg_list)); integral.re += integrand.re; integral.im += integrand.im; } } #endif } } free(pf); integral.re *= Vol / (n1 * n2 * n3); integral.im *= Vol / (n1 * n2 * n3); { cnumber integral_sum; mpi_allreduce(&integral, &integral_sum, 2, number, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); return integral_sum; } } mpb-1.5/mpb/fields.c0000644000175400001440000016070512315341423011255 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include #include #include "config.h" #include #include #include #include #include #include #include #include "mpb.h" #include "field-smob.h" /**************************************************************************/ /* The following routines take the eigenvectors computed by solve-kpoint and compute the field (D, H, or E) in position space for one of the bands. This field is stored in the global curfield (actually an alias for mdata->fft_data, since the latter is unused and big enough). This field can then be manipulated with subsequent "*-field-*" functions below. You can also get the scalar field, epsilon. All of these functions are designed to be called by the user via Guile. */ void get_dfield(int which_band) { if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called before get-dfield!\n"); return; } if (!kpoint_index) { mpi_one_fprintf(stderr, "solve-kpoint must be called before get-dfield!\n"); return; } if (which_band < 1 || which_band > H.p) { mpi_one_fprintf(stderr, "must have 1 <= band index <= num_bands (%d)\n",H.p); return; } curfield = (scalar_complex *) mdata->fft_data; curfield_band = which_band; curfield_type = 'd'; maxwell_compute_d_from_H(mdata, H, curfield, which_band - 1, 1); /* Here, we correct for the fact that compute_d_from_H actually computes just (k+G) x H, whereas the actual D field is i/omega i(k+G) x H...so, there is an added factor of -1/omega. We also divide by the cell volume so that the integral of |H|^2 or of D*E is unity. (From the eigensolver + FFT, they are initially normalized to sum to nx*ny*nz.) */ { int i, N; double scale; N = mdata->fft_output_size; if (freqs.items[which_band - 1] != 0.0) { scale = -1.0 / freqs.items[which_band - 1]; } else scale = -1.0; /* arbitrary */ scale /= sqrt(Vol); for (i = 0; i < 3*N; ++i) { curfield[i].re *= scale; curfield[i].im *= scale; } } } void get_hfield(integer which_band) { if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called before get-hfield!\n"); return; } if (!kpoint_index) { mpi_one_fprintf(stderr, "solve-kpoint must be called before get-hfield!\n"); return; } if (which_band < 1 || which_band > H.p) { mpi_one_fprintf(stderr, "must have 1 <= band index <= num_bands (%d)\n",H.p); return; } curfield = (scalar_complex *) mdata->fft_data; curfield_band = which_band; curfield_type = 'h'; maxwell_compute_h_from_H(mdata, H, curfield, which_band - 1, 1); /* Divide by the cell volume so that the integral of |H|^2 or of D*E is unity. (From the eigensolver + FFT, they are initially normalized to sum to nx*ny*nz.) */ { int i, N; double scale; N = mdata->fft_output_size; scale = 1.0 / sqrt(Vol); for (i = 0; i < 3*N; ++i) { curfield[i].re *= scale; curfield[i].im *= scale; } } } void get_efield_from_dfield(void) { if (!curfield || curfield_type != 'd') { mpi_one_fprintf(stderr, "get-dfield must be called before " "get-efield-from-dfield!\n"); return; } CHECK(mdata, "unexpected NULL mdata"); maxwell_compute_e_from_d(mdata, curfield, 1); curfield_type = 'e'; } void get_efield(integer which_band) { get_dfield(which_band); get_efield_from_dfield(); } /* Extract the mean epsilon from the effective inverse dielectric tensor, which contains two eigenvalues that correspond to the mean epsilon, and one which corresponds to the harmonic mean. */ real mean_epsilon_from_matrix(const symmetric_matrix *eps_inv) { real eps_eigs[3]; maxwell_sym_matrix_eigs(eps_eigs, eps_inv); /* the harmonic mean should be the largest eigenvalue (smallest epsilon), so we'll ignore it and average the other two: */ return 2.0 / (eps_eigs[0] + eps_eigs[1]); } /* get the dielectric function, and compute some statistics */ void get_epsilon(void) { int i, N, last_dim, last_dim_stored, nx, nz, local_y_start; real *epsilon; real eps_mean = 0, eps_inv_mean = 0, eps_high = -1e20, eps_low = 1e20; int fill_count = 0; if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called before get-epsilon!\n"); return; } curfield = (scalar_complex *) mdata->fft_data; epsilon = (real *) curfield; curfield_band = 0; curfield_type = 'n'; /* get epsilon. Recall that we actually have an inverse dielectric tensor at each point; define an average index by the inverse of the average eigenvalue of the 1/eps tensor. i.e. 3/(trace 1/eps). */ N = mdata->fft_output_size; last_dim = mdata->last_dim; last_dim_stored = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); nx = mdata->nx; nz = mdata->nz; local_y_start = mdata->local_y_start; for (i = 0; i < N; ++i) { epsilon[i] = mean_epsilon_from_matrix(mdata->eps_inv + i); if (epsilon[i] < eps_low) eps_low = epsilon[i]; if (epsilon[i] > eps_high) eps_high = epsilon[i]; eps_mean += epsilon[i]; eps_inv_mean += 1/epsilon[i]; if (epsilon[i] > 1.0001) ++fill_count; #ifndef SCALAR_COMPLEX /* most points need to be counted twice, by rfftw output symmetry: */ { int last_index; # ifdef HAVE_MPI if (nz == 1) /* 2d calculation: 1st dim. is truncated one */ last_index = i / nx + local_y_start; else last_index = i % last_dim_stored; # else last_index = i % last_dim_stored; # endif if (last_index != 0 && 2*last_index != last_dim) { eps_mean += epsilon[i]; eps_inv_mean += 1/epsilon[i]; if (epsilon[i] > 1.0001) ++fill_count; } } #endif } mpi_allreduce_1(&eps_mean, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); mpi_allreduce_1(&eps_inv_mean, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); mpi_allreduce_1(&eps_low, real, SCALAR_MPI_TYPE, MPI_MIN, MPI_COMM_WORLD); mpi_allreduce_1(&eps_high, real, SCALAR_MPI_TYPE, MPI_MAX, MPI_COMM_WORLD); mpi_allreduce_1(&fill_count, int, MPI_INT, MPI_SUM, MPI_COMM_WORLD); N = mdata->nx * mdata->ny * mdata->nz; eps_mean /= N; eps_inv_mean = N/eps_inv_mean; mpi_one_printf("epsilon: %g-%g, mean %g, harm. mean %g, " "%g%% > 1, %g%% \"fill\"\n", eps_low, eps_high, eps_mean, eps_inv_mean, (100.0 * fill_count) / N, eps_high == eps_low ? 100.0 : 100.0 * (eps_mean-eps_low) / (eps_high-eps_low)); } /* get the specified component of the dielectric tensor, or the inverse tensor if inv != 0 */ void get_epsilon_tensor(int c1, int c2, int imag, int inv) { int i, N; real *epsilon; int conj = 0, offset = 0; curfield_type = '-'; /* only used internally, for now */ epsilon = (real *) mdata->fft_data; N = mdata->fft_output_size; switch (c1 * 3 + c2) { case 0: offset = offsetof(symmetric_matrix, m00); break; case 1: offset = offsetof(symmetric_matrix, m01); break; case 2: offset = offsetof(symmetric_matrix, m02); break; case 3: offset = offsetof(symmetric_matrix, m01); /* = conj(m10) */ conj = imag; break; case 4: offset = offsetof(symmetric_matrix, m11); break; case 5: offset = offsetof(symmetric_matrix, m12); break; case 6: offset = offsetof(symmetric_matrix, m02); /* = conj(m20) */ conj = imag; break; case 7: offset = offsetof(symmetric_matrix, m12); /* = conj(m21) */ conj = imag; break; case 8: offset = offsetof(symmetric_matrix, m22); break; } #ifdef WITH_HERMITIAN_EPSILON if (c1 != c2 && imag) offset += offsetof(scalar_complex, im); #endif for (i = 0; i < N; ++i) { if (inv) { epsilon[i] = *((real *) (((char *) &mdata->eps_inv[i]) + offset)); } else { symmetric_matrix eps; maxwell_sym_matrix_invert(&eps, &mdata->eps_inv[i]); epsilon[i] = *((real *) (((char *) &eps) + offset)); } if (conj) epsilon[i] = -epsilon[i]; } } /**************************************************************************/ /* internal function for compute_field_energy, below */ double compute_field_energy_internal(real comp_sum[6]) { int i, N, last_dim, last_dim_stored, nx, nz, local_y_start; real comp_sum2[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; real energy_sum = 0.0; real *energy_density = (real *) curfield; N = mdata->fft_output_size; last_dim = mdata->last_dim; last_dim_stored = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); nx = mdata->nx; nz = mdata->nz; local_y_start = mdata->local_y_start; for (i = 0; i < N; ++i) { scalar_complex field[3]; real comp_sqr0,comp_sqr1,comp_sqr2,comp_sqr3,comp_sqr4,comp_sqr5; /* energy is either |curfield|^2 or |curfield|^2 / epsilon, depending upon whether it is H or D. */ if (curfield_type == 'd') assign_symmatrix_vector(field, mdata->eps_inv[i], curfield+3*i); else { field[0] = curfield[3*i]; field[1] = curfield[3*i+1]; field[2] = curfield[3*i+2]; } comp_sum2[0] += comp_sqr0 = field[0].re * curfield[3*i].re; comp_sum2[1] += comp_sqr1 = field[0].im * curfield[3*i].im; comp_sum2[2] += comp_sqr2 = field[1].re * curfield[3*i+1].re; comp_sum2[3] += comp_sqr3 = field[1].im * curfield[3*i+1].im; comp_sum2[4] += comp_sqr4 = field[2].re * curfield[3*i+2].re; comp_sum2[5] += comp_sqr5 = field[2].im * curfield[3*i+2].im; /* Note: here, we write to energy_density[i]; this is safe, even though energy_density is aliased to curfield, since energy_density[i] is guaranteed to come at or before curfield[i] (which we are now done with). */ energy_sum += energy_density[i] = comp_sqr0+comp_sqr1+comp_sqr2+comp_sqr3+comp_sqr4+comp_sqr5; #ifndef SCALAR_COMPLEX /* most points need to be counted twice, by rfftw output symmetry: */ { int last_index; # ifdef HAVE_MPI if (nz == 1) /* 2d calculation: 1st dim. is truncated one */ last_index = i / nx + local_y_start; else last_index = i % last_dim_stored; # else last_index = i % last_dim_stored; # endif if (last_index != 0 && 2*last_index != last_dim) { energy_sum += energy_density[i]; comp_sum2[0] += comp_sqr0; comp_sum2[1] += comp_sqr1; comp_sum2[2] += comp_sqr2; comp_sum2[3] += comp_sqr3; comp_sum2[4] += comp_sqr4; comp_sum2[5] += comp_sqr5; } } #endif } mpi_allreduce_1(&energy_sum, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); mpi_allreduce(comp_sum2, comp_sum, 6, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); /* remember that we now have energy density; denoted by capital D/H */ curfield_type = toupper(curfield_type); return energy_sum; } /* Replace curfield (either d or h) with the scalar energy density function, normalized to one. While we're at it, compute some statistics about the relative strength of different field components. Also return the integral of the energy density, which should be unity. */ number_list compute_field_energy(void) { int i; real energy_sum, comp_sum[6]; number_list retval = { 0, 0 }; if (!curfield || !strchr("dh", curfield_type)) { mpi_one_fprintf(stderr, "The D or H field must be loaded first.\n"); return retval; } energy_sum = compute_field_energy_internal(comp_sum); mpi_one_printf("%c-energy-components:, %d, %d", curfield_type, kpoint_index, curfield_band); for (i = 0; i < 6; ++i) { comp_sum[i] /= (energy_sum == 0 ? 1 : energy_sum); if (i % 2 == 1) mpi_one_printf(", %g", comp_sum[i] + comp_sum[i-1]); } mpi_one_printf("\n"); /* The return value is a list of 7 items: the total energy, followed by the 6 elements of the comp_sum array (the fraction of the energy in the real/imag. parts of each field component). */ retval.num_items = 7; CHK_MALLOC(retval.items, number, retval.num_items); retval.items[0] = energy_sum * Vol / H.N; for (i = 0; i < 6; ++i) retval.items[i+1] = comp_sum[i]; return retval; } /* compute |F|^2 for the current field, whether or not this is an energy density */ void compute_field_squared(void) { real comp_sum[6]; /* unused */ if (!curfield || !strchr("dhecv", curfield_type)) { mpi_one_fprintf(stderr, "A vector field must be loaded first.\n"); } curfield_type = 'c'; /* force it to just square the field */ compute_field_energy_internal(comp_sum); curfield_type = 'R'; /* generic real scalar field */ } /**************************************************************************/ /* replace the current field with its scalar divergence; only works for Bloch fields */ void compute_field_divergence(void) { int i, j, N; scalar *field = (scalar *) curfield; scalar *field2 = mdata->fft_data == mdata->fft_data2 ? field : (field == mdata->fft_data ? mdata->fft_data2 : mdata->fft_data); real scale; if (!curfield || !strchr("dhec", curfield_type)) { mpi_one_fprintf(stderr, "A Bloch-periodic field must be loaded.\n"); return; } /* convert back to Fourier space */ maxwell_compute_fft(-1, mdata, field, field2, 3, 3, 1); /* compute (k+G) dot field */ for (i = 0; i < mdata->other_dims; ++i) for (j = 0; j < mdata->last_dim; ++j) { int ij = i * mdata->last_dim_size + j; k_data cur_k = mdata->k_plus_G[ij]; /* k+G = |k+G| (m x n) */ real kx = cur_k.kmag * (cur_k.my*cur_k.nz-cur_k.mz*cur_k.ny); real ky = cur_k.kmag * (cur_k.mz*cur_k.nx-cur_k.mx*cur_k.nz); real kz = cur_k.kmag * (cur_k.mx*cur_k.ny-cur_k.my*cur_k.nz); ASSIGN_SCALAR(field2[ij], SCALAR_RE(field2[3*ij+0]) * kx + SCALAR_RE(field2[3*ij+1]) * ky + SCALAR_RE(field2[3*ij+2]) * kz, SCALAR_IM(field2[3*ij+0]) * kx + SCALAR_IM(field2[3*ij+1]) * ky + SCALAR_IM(field2[3*ij+2]) * kz); } /* convert scalar field back to position space */ maxwell_compute_fft(+1, mdata, field2, field, 1, 1, 1); /* multiply by i (from divergence) and normalization (from FFT) and 2*pi (from k+G) */ scale = TWOPI / H.N; N = mdata->fft_output_size; for (i = 0; i < N; ++i) { CASSIGN_SCALAR(curfield[i], -CSCALAR_IM(curfield[i]) * scale, CSCALAR_RE(curfield[i]) * scale); } curfield_type = 'C'; /* complex (Bloch) scalar field */ } /**************************************************************************/ /* Fix the phase of the current field (e/h/d) to a canonical value. Also changes the phase of the corresponding eigenvector by the same amount, so that future calculations will have a consistent phase. The following procedure is used, derived from a suggestion by Doug Allan of Corning: First, choose the phase to maximize the sum of the squares of the real parts of the components. This doesn't fix the overall sign, though. That is done (after incorporating the above phase) by: (1) find the largest absolute value of the real part, (2) find the point with the greatest spatial array index that has |real part| at least half of the largest value, and (3) make that point positive. In the case of inversion symmetry, on the other hand, the overall phase is already fixed, to within a sign, by the choice to make the Fourier transform purely real. So, in that case we simply pick a sign, in a manner similar to (2) and (3) above. */ void fix_field_phase(void) { int i, N; real sq_sum2[2] = {0,0}, sq_sum[2], maxabs = 0.0; int maxabs_index = 0, maxabs_sign = 1; double theta; scalar phase; if (!curfield || !strchr("dhecv", curfield_type)) { mpi_one_fprintf(stderr, "The D/H/E field must be loaded first.\n"); return; } N = mdata->fft_output_size * 3; #ifdef SCALAR_COMPLEX /* Compute the phase that maximizes the sum of the squares of the real parts of the components. Equivalently, maximize the real part of the sum of the squares. */ for (i = 0; i < N; ++i) { real a,b; a = curfield[i].re; b = curfield[i].im; sq_sum2[0] += a*a - b*b; sq_sum2[1] += 2*a*b; } mpi_allreduce(sq_sum2, sq_sum, 2, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); /* compute the phase = exp(i*theta) maximizing the real part of the sum of the squares. i.e., maximize: cos(2*theta)*sq_sum[0] - sin(2*theta)*sq_sum[1] */ theta = 0.5 * atan2(-sq_sum[1], sq_sum[0]); phase.re = cos(theta); phase.im = sin(theta); #else /* ! SCALAR_COMPLEX */ phase = 1; #endif /* ! SCALAR_COMPLEX */ /* Next, fix the overall sign. We do this by first computing the maximum |real part| of the jmax component (after multiplying by phase), and then finding the last spatial index at which |real part| is at least half of this value. The sign is then chosen to make the real part positive at that point. (Note that we can't just make the point of maximum |real part| positive, as that would be ambiguous in the common case of an oscillating field within the unit cell.) In the case of inversion symmetry (!SCALAR_COMPLEX), we work with (real part - imag part) instead of (real part), to insure that we have something that is nonzero somewhere. */ for (i = 0; i < N; ++i) { #ifdef SCALAR_COMPLEX real r = fabs(curfield[i].re * phase.re - curfield[i].im * phase.im); #else real r = fabs(curfield[i].re - curfield[i].im); #endif if (r > maxabs) maxabs = r; } mpi_allreduce_1(&maxabs, real, SCALAR_MPI_TYPE, MPI_MAX, MPI_COMM_WORLD); for (i = N - 1; i >= 0; --i) { #ifdef SCALAR_COMPLEX real r = curfield[i].re * phase.re - curfield[i].im * phase.im; #else real r = curfield[i].re - curfield[i].im; #endif if (fabs(r) >= 0.5 * maxabs) { maxabs_index = i; maxabs_sign = r < 0 ? -1 : 1; break; } } if (i >= 0) /* convert index to global index in distributed array: */ maxabs_index += mdata->local_y_start * mdata->nx * mdata->nz; { /* compute maximum index and corresponding sign over all the processors, using the MPI_MAXLOC reduction operation: */ struct twoint_struct {int i; int s;} x; x.i = maxabs_index; x.s = maxabs_sign; mpi_allreduce_1(&x, struct twoint_struct, MPI_2INT, MPI_MAXLOC, MPI_COMM_WORLD); maxabs_index = x.i; maxabs_sign = x.s; } ASSIGN_SCALAR(phase, SCALAR_RE(phase)*maxabs_sign, SCALAR_IM(phase)*maxabs_sign); mpi_one_printf("Fixing %c-field (band %d) phase by %g + %gi; " "max ampl. = %g\n", curfield_type, curfield_band, SCALAR_RE(phase), SCALAR_IM(phase), maxabs); /* Now, multiply everything by this phase, *including* the stored "raw" eigenvector in H, so that any future fields that we compute will have a consistent phase: */ for (i = 0; i < N; ++i) { real a,b; a = curfield[i].re; b = curfield[i].im; curfield[i].re = a*SCALAR_RE(phase) - b*SCALAR_IM(phase); curfield[i].im = a*SCALAR_IM(phase) + b*SCALAR_RE(phase); } for (i = 0; i < H.n; ++i) { ASSIGN_MULT(H.data[i*H.p + curfield_band - 1], H.data[i*H.p + curfield_band - 1], phase); } } /**************************************************************************/ /* Functions to return epsilon, fields, energies, etcetera, at a specified point, linearly interpolating if necessary. */ static real get_val(int ix, int iy, int iz, int nx, int ny, int nz, int last_dim_size, real *data, int stride, int conjugate) { #ifndef SCALAR_COMPLEX { int nlast = last_dim_size / 2; if ((nz > 1 ? iz : (ny > 1 ? iy : ix)) >= nlast) { ix = ix ? nx - ix : ix; iy = iy ? ny - iy : iy; iz = iz ? nz - iz : iz; conjugate = conjugate ? 1 : 0; } else conjugate = 0; if (nz > 1) nz = nlast; else if (ny > 1) ny = nlast; else nx = nlast; } #else conjugate = 0; #endif #ifdef HAVE_MPI CHECK(0, "get-*-point not yet implemented for MPI!"); #else if (conjugate) return -data[(((ix * ny) + iy) * nz + iz) * stride]; else return data[(((ix * ny) + iy) * nz + iz) * stride]; #endif } static real interp_val(vector3 p, int nx, int ny, int nz, int last_dim_size, real *data, int stride, int conjugate) { double ipart; real rx, ry, rz, dx, dy, dz; int x, y, z, x2, y2, z2; rx = modf(p.x/geometry_lattice.size.x + 0.5, &ipart); if (rx < 0) rx += 1; ry = modf(p.y/geometry_lattice.size.y + 0.5, &ipart); if (ry < 0) ry += 1; rz = modf(p.z/geometry_lattice.size.z + 0.5, &ipart); if (rz < 0) rz += 1; /* get the point corresponding to r in the grid: */ x = rx * nx; y = ry * ny; z = rz * nz; /* get the difference between (x,y,z) and the actual point */ dx = rx * nx - x; dy = ry * ny - y; dz = rz * nz - z; /* get the other closest point in the grid, with periodic boundaries: */ x2 = (nx + (dx >= 0.0 ? x + 1 : x - 1)) % nx; y2 = (ny + (dy >= 0.0 ? y + 1 : y - 1)) % ny; z2 = (nz + (dz >= 0.0 ? z + 1 : z - 1)) % nz; /* take abs(d{xyz}) to get weights for {xyz} and {xyz}2: */ dx = fabs(dx); dy = fabs(dy); dz = fabs(dz); #define D(x,y,z) (get_val(x,y,z,nx,ny,nz,last_dim_size, data,stride,conjugate)) return(((D(x,y,z)*(1.0-dx) + D(x2,y,z)*dx) * (1.0-dy) + (D(x,y2,z)*(1.0-dx) + D(x2,y2,z)*dx) * dy) * (1.0-dz) + ((D(x,y,z2)*(1.0-dx) + D(x2,y,z2)*dx) * (1.0-dy) + (D(x,y2,z2)*(1.0-dx) + D(x2,y2,z2)*dx) * dy) * dz); #undef D } static scalar_complex interp_cval(vector3 p, int nx, int ny, int nz, int last_dim_size, real *data, int stride) { scalar_complex cval; cval.re = interp_val(p, nx,ny,nz,last_dim_size, data, stride, 0); cval.im = interp_val(p, nx,ny,nz,last_dim_size,data + 1, stride, 1); return cval; } #define f_interp_val(p,f,data,stride,conj) interp_val(p,f->nx,f->ny,f->nz,f->last_dim_size,data,stride,conj) #define f_interp_cval(p,f,data,stride) interp_cval(p,f->nx,f->ny,f->nz,f->last_dim_size,data,stride) static symmetric_matrix interp_eps_inv(vector3 p) { int stride = sizeof(symmetric_matrix) / sizeof(real); symmetric_matrix eps_inv; eps_inv.m00 = f_interp_val(p, mdata, &mdata->eps_inv->m00, stride, 0); eps_inv.m11 = f_interp_val(p, mdata, &mdata->eps_inv->m11, stride, 0); eps_inv.m22 = f_interp_val(p, mdata, &mdata->eps_inv->m22, stride, 0); #ifdef WITH_HERMITIAN_EPSILON eps_inv.m01 = f_interp_cval(p, mdata, &mdata->eps_inv->m01.re, stride); eps_inv.m02 = f_interp_cval(p, mdata, &mdata->eps_inv->m02.re, stride); eps_inv.m12 = f_interp_cval(p, mdata, &mdata->eps_inv->m12.re, stride); #else eps_inv.m01 = f_interp_val(p, mdata, &mdata->eps_inv->m01, stride, 0); eps_inv.m02 = f_interp_val(p, mdata, &mdata->eps_inv->m02, stride, 0); eps_inv.m12 = f_interp_val(p, mdata, &mdata->eps_inv->m12, stride, 0); #endif return eps_inv; } number get_epsilon_point(vector3 p) { symmetric_matrix eps_inv; eps_inv = interp_eps_inv(p); return mean_epsilon_from_matrix(&eps_inv); } cmatrix3x3 get_epsilon_inverse_tensor_point(vector3 p) { symmetric_matrix eps_inv; eps_inv = interp_eps_inv(p); #ifdef WITH_HERMITIAN_EPSILON return make_hermitian_cmatrix3x3(eps_inv.m00,eps_inv.m11,eps_inv.m22, cscalar2cnumber(eps_inv.m01), cscalar2cnumber(eps_inv.m02), cscalar2cnumber(eps_inv.m12)); #else return make_hermitian_cmatrix3x3(eps_inv.m00,eps_inv.m11,eps_inv.m22, make_cnumber(eps_inv.m01,0), make_cnumber(eps_inv.m02,0), make_cnumber(eps_inv.m12,0)); #endif } number get_energy_point(vector3 p) { CHECK(curfield && strchr("DHR", curfield_type), "compute-field-energy must be called before get-energy-point"); return f_interp_val(p, mdata, (real *) curfield, 1, 0); } cvector3 get_bloch_field_point(vector3 p) { scalar_complex field[3]; cvector3 F; CHECK(curfield && strchr("dhecv", curfield_type), "field must be must be loaded before get-*field*-point"); field[0] = f_interp_cval(p, mdata, &curfield[0].re, 6); field[1] = f_interp_cval(p, mdata, &curfield[1].re, 6); field[2] = f_interp_cval(p, mdata, &curfield[2].re, 6); F.x = cscalar2cnumber(field[0]); F.y = cscalar2cnumber(field[1]); F.z = cscalar2cnumber(field[2]); return F; } cvector3 get_field_point(vector3 p) { scalar_complex field[3], phase; cvector3 F; CHECK(curfield && strchr("dhecv", curfield_type), "field must be must be loaded before get-*field*-point"); field[0] = f_interp_cval(p, mdata, &curfield[0].re, 6); field[1] = f_interp_cval(p, mdata, &curfield[1].re, 6); field[2] = f_interp_cval(p, mdata, &curfield[2].re, 6); if (curfield_type != 'v') { double phase_phi = TWOPI * (cur_kvector.x * (p.x/geometry_lattice.size.x) + cur_kvector.y * (p.y/geometry_lattice.size.y) + cur_kvector.z * (p.z/geometry_lattice.size.z)); CASSIGN_SCALAR(phase, cos(phase_phi), sin(phase_phi)); CASSIGN_MULT(field[0], field[0], phase); CASSIGN_MULT(field[1], field[1], phase); CASSIGN_MULT(field[2], field[2], phase); } F.x = cscalar2cnumber(field[0]); F.y = cscalar2cnumber(field[1]); F.z = cscalar2cnumber(field[2]); return F; } cnumber get_bloch_cscalar_point(vector3 p) { CHECK(curfield && strchr("C", curfield_type), "cscalar must be must be loaded before get-*cscalar*-point"); return cscalar2cnumber(f_interp_cval(p, mdata, &curfield[0].re, 2)); } cnumber get_cscalar_point(vector3 p) { scalar_complex s; CHECK(curfield && strchr("C", curfield_type), "cscalar must be must be loaded before get-*cscalar*-point"); s = f_interp_cval(p, mdata, &curfield[0].re, 2); if (curfield_type == 'C') { scalar_complex phase; double phase_phi = TWOPI * (cur_kvector.x * (p.x/geometry_lattice.size.x) + cur_kvector.y * (p.y/geometry_lattice.size.y) + cur_kvector.z * (p.z/geometry_lattice.size.z)); CASSIGN_SCALAR(phase, cos(phase_phi), sin(phase_phi)); CASSIGN_MULT(s, s, phase); } return cscalar2cnumber(s); } number rscalar_field_get_point(SCM fo, vector3 p) { field_smob *f = assert_field_smob(fo); CHECK(f->type == RSCALAR_FIELD_SMOB, "invalid argument to rscalar-field-get-point"); return f_interp_val(p, f, f->f.rs, 1, 0); } cvector3 cvector_field_get_point_bloch(SCM fo, vector3 p) { scalar_complex field[3]; cvector3 F; field_smob *f = assert_field_smob(fo); CHECK(f->type == CVECTOR_FIELD_SMOB, "invalid argument to cvector-field-get-point"); field[0] = f_interp_cval(p, f, &f->f.cv[0].re, 6); field[1] = f_interp_cval(p, f, &f->f.cv[1].re, 6); field[2] = f_interp_cval(p, f, &f->f.cv[2].re, 6); F.x = cscalar2cnumber(field[0]); F.y = cscalar2cnumber(field[1]); F.z = cscalar2cnumber(field[2]); return F; } cvector3 cvector_field_get_point(SCM fo, vector3 p) { scalar_complex field[3]; cvector3 F; field_smob *f = assert_field_smob(fo); CHECK(f->type == CVECTOR_FIELD_SMOB, "invalid argument to cvector-field-get-point"); field[0] = f_interp_cval(p, f, &f->f.cv[0].re, 6); field[1] = f_interp_cval(p, f, &f->f.cv[1].re, 6); field[2] = f_interp_cval(p, f, &f->f.cv[2].re, 6); if (f->type_char != 'v') { /* v fields have no kvector */ scalar_complex phase; double phase_phi = TWOPI * (cur_kvector.x * (p.x/geometry_lattice.size.x) + cur_kvector.y * (p.y/geometry_lattice.size.y) + cur_kvector.z * (p.z/geometry_lattice.size.z)); CASSIGN_SCALAR(phase, cos(phase_phi), sin(phase_phi)); CASSIGN_MULT(field[0], field[0], phase); CASSIGN_MULT(field[1], field[1], phase); CASSIGN_MULT(field[2], field[2], phase); } F.x = cscalar2cnumber(field[0]); F.y = cscalar2cnumber(field[1]); F.z = cscalar2cnumber(field[2]); return F; } cnumber cscalar_field_get_point_bloch(SCM fo, vector3 p) { field_smob *f = assert_field_smob(fo); CHECK(f->type == CSCALAR_FIELD_SMOB, "invalid argument to cscalar-field-get-point-bloch"); return cscalar2cnumber(f_interp_cval(p, f, &f->f.cv[0].re, 2)); } cnumber cscalar_field_get_point(SCM fo, vector3 p) { scalar_complex s; field_smob *f = assert_field_smob(fo); CHECK(f->type == CSCALAR_FIELD_SMOB, "invalid argument to cscalar-field-get-point"); s = f_interp_cval(p, f, &f->f.cv[0].re, 2); if (f->type_char == 'C') { /* have kvector */ scalar_complex phase; double phase_phi = TWOPI * (cur_kvector.x * (p.x/geometry_lattice.size.x) + cur_kvector.y * (p.y/geometry_lattice.size.y) + cur_kvector.z * (p.z/geometry_lattice.size.z)); CASSIGN_SCALAR(phase, cos(phase_phi), sin(phase_phi)); CASSIGN_MULT(s, s, phase); } return cscalar2cnumber(s); } /**************************************************************************/ /* compute the fraction of the field energy that is located in the given range of dielectric constants: */ number compute_energy_in_dielectric(number eps_low, number eps_high) { int N, i, last_dim, last_dim_stored, nx, nz, local_y_start; real *energy = (real *) curfield; real epsilon, energy_sum = 0.0; if (!curfield || !strchr("DHR", curfield_type)) { mpi_one_fprintf(stderr, "The D or H energy density must be loaded first.\n"); return 0.0; } N = mdata->fft_output_size; last_dim = mdata->last_dim; last_dim_stored = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); nx = mdata->nx; nz = mdata->nz; local_y_start = mdata->local_y_start; for (i = 0; i < N; ++i) { epsilon = mean_epsilon_from_matrix(mdata->eps_inv +i); if (epsilon >= eps_low && epsilon <= eps_high) { energy_sum += energy[i]; #ifndef SCALAR_COMPLEX /* most points are counted twice, by rfftw output symmetry: */ { int last_index; # ifdef HAVE_MPI if (nz == 1) /* 2d: 1st dim. is truncated one */ last_index = i / nx + local_y_start; else last_index = i % last_dim_stored; # else last_index = i % last_dim_stored; # endif if (last_index != 0 && 2*last_index != last_dim) energy_sum += energy[i]; } #endif } } mpi_allreduce_1(&energy_sum, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); energy_sum *= Vol / H.N; return energy_sum; } /**************************************************************************/ /* Prepend the prefix to the fname, and (if parity_suffix is true) append a parity specifier (if any) (e.g. ".te"), returning a new string, which should be deallocated with free(). fname or prefix may be NULL, in which case they are treated as the empty string. */ static char *fix_fname(const char *fname, const char *prefix, maxwell_data *d, int parity_suffix) { char *s; CHK_MALLOC(s, char, (fname ? strlen(fname) : 0) + (prefix ? strlen(prefix) : 0) + 20); strcpy(s, prefix ? prefix : ""); strcat(s, fname ? fname : ""); if (parity_suffix && d->parity != NO_PARITY) { /* assumes parity suffix is less than 20 characters; currently it is less than 12 */ strcat(s, "."); strcat(s, parity_string(d)); } return s; } static void output_scalarfield(real *vals, const int dims[3], const int local_dims[3], const int start[3], matrixio_id file_id, const char *dataname, int last_dim_index, int last_dim_start, int last_dim_size, int first_dim_start, int first_dim_size, int write_start0_special) { matrixio_id data_id = {-1, 1}; fieldio_write_real_vals(vals, 3, dims, local_dims, start, file_id, 0, dataname, &data_id); #ifndef SCALAR_COMPLEX { int start_new[3], local_dims_new[3]; start_new[0] = start[0]; start_new[1] = start[1]; start_new[2] = start[2]; local_dims_new[0] = local_dims[0]; local_dims_new[1] = local_dims[1]; local_dims_new[2] = local_dims[2]; maxwell_scalarfield_otherhalf(mdata, vals); start_new[last_dim_index] = last_dim_start; local_dims_new[last_dim_index] = last_dim_size; start_new[0] = first_dim_start; local_dims_new[0] = first_dim_size; if (write_start0_special) { /* The conjugated array half may be discontiguous. First, write the part not containing start_new[0], and then write the start_new[0] slab. */ fieldio_write_real_vals(vals + local_dims_new[1] * local_dims_new[2], 3, dims, local_dims_new, start_new, file_id, 1, dataname, &data_id); local_dims_new[0] = 1; start_new[0] = 0; fieldio_write_real_vals(vals, 3, dims, local_dims_new, start_new, file_id, 1, dataname, &data_id); } else { fieldio_write_real_vals(vals, 3, dims, local_dims_new, start_new, file_id, 1, dataname, &data_id); } } #endif if (data_id.id >= 0) matrixio_close_dataset(data_id); } /* given the field in curfield, store it to HDF (or whatever) using the matrixio (fieldio) routines. Allow the component to be specified (which_component 0/1/2 = x/y/z, -1 = all) for vector fields. Also allow the user to specify a prefix string for the filename. */ void output_field_to_file(integer which_component, string filename_prefix) { char fname[100], *fname2, description[100]; int dims[3], local_dims[3], start[3] = {0,0,0}; matrixio_id file_id = {-1,1}; int attr_dims[2] = {3, 3}; real output_k[3]; /* kvector in reciprocal lattice basis */ real output_R[3][3]; /* where to put "otherhalf" block of output, only used for real scalars */ int last_dim_index = 0; int last_dim_start = 0, last_dim_size = 0; int first_dim_start = 0, first_dim_size = 0; int write_start0_special = 0; if (!curfield) { mpi_one_fprintf(stderr, "fields, energy dens., or epsilon must be loaded first.\n"); return; } #ifdef HAVE_MPI /* The first two dimensions (x and y) of the position-space fields are transposed when we use MPI, so we need to transpose everything. */ dims[0] = mdata->ny; local_dims[1] = dims[1] = mdata->nx; local_dims[2] = dims[2] = mdata->nz; local_dims[0] = mdata->local_ny; start[0] = mdata->local_y_start; # ifndef SCALAR_COMPLEX /* Ugh, hairy. See also maxwell_vectorfield_otherhalf. */ if (dims[2] == 1) { last_dim_index = 0; first_dim_size = local_dims[0]; first_dim_start = dims[0] - (start[0] + local_dims[0] - 1); if (start[0] == 0) --first_dim_size; /* DC frequency is not in other half */ if (start[0] + local_dims[0] == mdata->last_dim_size / 2 && dims[0] % 2 == 0) { --first_dim_size; /* Nyquist frequency is not in other half */ ++first_dim_start; } last_dim_start = first_dim_start; last_dim_size = first_dim_size; } else { last_dim_index = 2; local_dims[last_dim_index] = mdata->last_dim_size / 2; if (start[0] == 0) { first_dim_size = local_dims[0] - 1; first_dim_start = dims[0] - first_dim_size; write_start0_special = 1; } else { first_dim_start = dims[0] - (start[0] + local_dims[0] - 1); first_dim_size = local_dims[0]; } last_dim_start = local_dims[last_dim_index]; last_dim_size = dims[last_dim_index] - local_dims[last_dim_index]; } # endif /* ! SCALAR_COMPLEX */ output_k[0] = R[1][0]*mdata->current_k[0] + R[1][1]*mdata->current_k[1] + R[1][2]*mdata->current_k[2]; output_k[1] = R[0][0]*mdata->current_k[0] + R[0][1]*mdata->current_k[1] + R[0][2]*mdata->current_k[2]; output_k[2] = R[2][0]*mdata->current_k[0] + R[2][1]*mdata->current_k[1] + R[2][2]*mdata->current_k[2]; output_R[0][0]=R[1][0]; output_R[0][1]=R[1][1]; output_R[0][2]=R[1][2]; output_R[1][0]=R[0][0]; output_R[1][1]=R[0][1]; output_R[1][2]=R[0][2]; output_R[2][0]=R[2][0]; output_R[2][1]=R[2][1]; output_R[2][2]=R[2][2]; #else /* ! HAVE_MPI */ dims[0] = mdata->nx; local_dims[1] = dims[1] = mdata->ny; local_dims[2] = dims[2] = mdata->nz; local_dims[0] = mdata->local_nx; # ifndef SCALAR_COMPLEX last_dim_index = dims[2] == 1 ? (dims[1] == 1 ? 0 : 1) : 2; local_dims[last_dim_index] = mdata->last_dim_size / 2; last_dim_start = local_dims[last_dim_index]; last_dim_size = dims[last_dim_index] - local_dims[last_dim_index]; first_dim_start = last_dim_index ? 0 : last_dim_start; first_dim_size = last_dim_index ? local_dims[0] : last_dim_size; # endif start[0] = mdata->local_x_start; output_k[0] = R[0][0]*mdata->current_k[0] + R[0][1]*mdata->current_k[1] + R[0][2]*mdata->current_k[2]; output_k[1] = R[1][0]*mdata->current_k[0] + R[1][1]*mdata->current_k[1] + R[1][2]*mdata->current_k[2]; output_k[2] = R[2][0]*mdata->current_k[0] + R[2][1]*mdata->current_k[1] + R[2][2]*mdata->current_k[2]; output_R[0][0]=R[0][0]; output_R[0][1]=R[0][1]; output_R[0][2]=R[0][2]; output_R[1][0]=R[1][0]; output_R[1][1]=R[1][1]; output_R[1][2]=R[1][2]; output_R[2][0]=R[2][0]; output_R[2][1]=R[2][1]; output_R[2][2]=R[2][2]; #endif /* ! HAVE_MPI */ if (strchr("Rv", curfield_type)) /* generic scalar/vector field */ output_k[0] = output_k[1] = output_k[2] = 0.0; /* don't know k */ if (strchr("dhecv", curfield_type)) { /* outputting vector field */ matrixio_id data_id[6] = {{-1,1},{-1,1},{-1,1},{-1,1},{-1,1},{-1,1}}; int i; sprintf(fname, "%c.k%02d.b%02d", curfield_type, kpoint_index, curfield_band); if (which_component >= 0) { char comp_str[] = ".x"; comp_str[1] = 'x' + which_component; strcat(fname, comp_str); } sprintf(description, "%c field, kpoint %d, band %d, freq=%g", curfield_type, kpoint_index, curfield_band, freqs.items[curfield_band - 1]); fname2 = fix_fname(fname, filename_prefix, mdata, 1); mpi_one_printf("Outputting fields to %s...\n", fname2); file_id = matrixio_create(fname2); free(fname2); fieldio_write_complex_field(curfield, 3, dims, local_dims, start, which_component, 3, output_k, file_id, 0, data_id); #ifndef SCALAR_COMPLEX /* Here's where it gets hairy. */ maxwell_vectorfield_otherhalf(mdata, curfield, output_k[0], output_k[1], output_k[2]); start[last_dim_index] = last_dim_start; local_dims[last_dim_index] = last_dim_size; start[0] = first_dim_start; local_dims[0] = first_dim_size; if (write_start0_special) { /* The conjugated array half may be discontiguous. First, write the part not containing start[0], and then write the start[0] slab. */ fieldio_write_complex_field(curfield + 3 * local_dims[1] * local_dims[2], 3, dims, local_dims, start, which_component, 3, NULL, file_id, 1, data_id); local_dims[0] = 1; start[0] = 0; fieldio_write_complex_field(curfield, 3, dims,local_dims,start, which_component, 3, NULL, file_id, 1, data_id); } else { fieldio_write_complex_field(curfield, 3, dims,local_dims,start, which_component, 3, NULL, file_id, 1, data_id); } #endif for (i = 0; i < 6; ++i) if (data_id[i].id >= 0) matrixio_close_dataset(data_id[i]); matrixio_write_data_attr(file_id, "Bloch wavevector", output_k, 1, attr_dims); } else if (strchr("C", curfield_type)) { /* outputting cmplx scalar field */ matrixio_id data_id[2] = {{-1,1},{-1,1}}; int i; sprintf(fname, "%c.k%02d.b%02d", curfield_type, kpoint_index, curfield_band); sprintf(description, "%c field, kpoint %d, band %d, freq=%g", curfield_type, kpoint_index, curfield_band, freqs.items[curfield_band - 1]); fname2 = fix_fname(fname, filename_prefix, mdata, 1); mpi_one_printf("Outputting complex scalar field to %s...\n", fname2); file_id = matrixio_create(fname2); free(fname2); fieldio_write_complex_field(curfield, 3, dims, local_dims, start, which_component, 1, output_k, file_id, 0, data_id); #ifndef SCALAR_COMPLEX /* Here's where it gets hairy. */ maxwell_cscalarfield_otherhalf(mdata, curfield, output_k[0], output_k[1], output_k[2]); start[last_dim_index] = last_dim_start; local_dims[last_dim_index] = last_dim_size; start[0] = first_dim_start; local_dims[0] = first_dim_size; if (write_start0_special) { /* The conjugated array half may be discontiguous. First, write the part not containing start[0], and then write the start[0] slab. */ fieldio_write_complex_field(curfield + local_dims[1] * local_dims[2], 3, dims, local_dims, start, which_component, 1, NULL, file_id, 1, data_id); local_dims[0] = 1; start[0] = 0; fieldio_write_complex_field(curfield, 3, dims,local_dims,start, which_component, 1, NULL, file_id, 1, data_id); } else { fieldio_write_complex_field(curfield, 3, dims,local_dims,start, which_component, 1, NULL, file_id, 1, data_id); } #endif for (i = 0; i < 2; ++i) if (data_id[i].id >= 0) matrixio_close_dataset(data_id[i]); matrixio_write_data_attr(file_id, "Bloch wavevector", output_k, 1, attr_dims); } else if (strchr("DHnR", curfield_type)) { /* scalar field */ if (curfield_type == 'n') { sprintf(fname, "epsilon"); sprintf(description, "dielectric function, epsilon"); } else { sprintf(fname, "%cpwr.k%02d.b%02d", tolower(curfield_type), kpoint_index, curfield_band); sprintf(description, "%c field energy density, kpoint %d, band %d, freq=%g", curfield_type, kpoint_index, curfield_band, freqs.items[curfield_band - 1]); } fname2 = fix_fname(fname, filename_prefix, mdata, /* no parity suffix for epsilon: */ curfield_type != 'n'); mpi_one_printf("Outputting %s...\n", fname2); file_id = matrixio_create(fname2); free(fname2); output_scalarfield((real *) curfield, dims, local_dims, start, file_id, "data", last_dim_index, last_dim_start, last_dim_size, first_dim_start, first_dim_size, write_start0_special); if (curfield_type == 'n') { int c1, c2, inv; char dataname[100]; for (inv = 0; inv < 2; ++inv) for (c1 = 0; c1 < 3; ++c1) for (c2 = c1; c2 < 3; ++c2) { get_epsilon_tensor(c1,c2, 0, inv); sprintf(dataname, "%s.%c%c", inv ? "epsilon_inverse" : "epsilon", c1 + 'x', c2 + 'x'); output_scalarfield((real *) curfield, dims, local_dims, start, file_id, dataname, last_dim_index, last_dim_start, last_dim_size, first_dim_start, first_dim_size, write_start0_special); #if defined(WITH_HERMITIAN_EPSILON) if (c1 != c2) { get_epsilon_tensor(c1,c2, 1, inv); strcat(dataname, ".i"); #ifndef SCALAR_COMPLEX /* scalarfield_otherhalf isn't right */ strcat(dataname, ".screwy"); #endif output_scalarfield((real *) curfield, dims, local_dims, start, file_id, dataname, last_dim_index, last_dim_start, last_dim_size, first_dim_start, first_dim_size, write_start0_special); } #endif } } } else mpi_one_fprintf(stderr, "unknown field type!\n"); if (file_id.id >= 0) { matrixio_write_data_attr(file_id, "lattice vectors", &output_R[0][0], 2, attr_dims); matrixio_write_string_attr(file_id, "description", description); matrixio_close(file_id); } /* We have destroyed curfield (by multiplying it by phases, and/or reorganizing in the case of real-amplitude fields). */ curfield_reset(); } /**************************************************************************/ /* For curfield an energy density, compute the fraction of the energy that resides inside the given list of geometric objects. Later objects in the list have precedence, just like the ordinary geometry list. */ number compute_energy_in_object_list(geometric_object_list objects) { int i, j, k, n1, n2, n3, n_other, n_last, rank, last_dim; #ifdef HAVE_MPI int local_n2, local_y_start, local_n3; #endif real s1, s2, s3, c1, c2, c3; real *energy = (real *) curfield; real energy_sum = 0; if (!curfield || !strchr("DHR", curfield_type)) { mpi_one_fprintf(stderr, "The D or H energy density must be loaded first.\n"); return 0.0; } for (i = 0; i < objects.num_items; ++i) geom_fix_object(objects.items[i]); n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; n_other = mdata->other_dims; n_last = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); last_dim = mdata->last_dim; rank = (n3 == 1) ? (n2 == 1 ? 1 : 2) : 3; s1 = geometry_lattice.size.x / n1; s2 = geometry_lattice.size.y / n2; s3 = geometry_lattice.size.z / n3; c1 = n1 <= 1 ? 0 : geometry_lattice.size.x * 0.5; c2 = n2 <= 1 ? 0 : geometry_lattice.size.y * 0.5; c3 = n3 <= 1 ? 0 : geometry_lattice.size.z * 0.5; /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and "index" describing the corresponding index in the curfield array. This was all stolen from maxwell_eps.c...it would be better if we didn't have to cut and paste, sigh. */ #ifdef SCALAR_COMPLEX # ifndef HAVE_MPI for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j, k2 = k; int index = ((i * n2 + j) * n3 + k); # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j + local_y_start, k2 = k; int index = ((j * n1 + i) * n3 + k); # endif /* HAVE_MPI */ #else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI for (i = 0; i < n_other; ++i) for (j = 0; j < n_last; ++j) { int index = i * n_last + j; int i2, j2, k2; switch (rank) { case 2: i2 = i; j2 = j; k2 = 0; break; case 3: i2 = i / n2; j2 = i % n2; k2 = j; break; default: i2 = j; j2 = k2 = 0; break; } # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* For a real->complex transform, the last dimension is cut in half. For a 2d transform, this is taken into account in local_ny already, but for a 3d transform we must compute the new n3: */ if (n3 > 1) local_n3 = mdata->last_dim_size / 2; else local_n3 = 1; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < local_n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int index = ((j * n1 + i) * local_n3 + k); # endif /* HAVE_MPI */ #endif /* not SCALAR_COMPLEX */ { vector3 p; int n; p.x = i2 * s1 - c1; p.y = j2 * s2 - c2; p.z = k2 * s3 - c3; for (n = objects.num_items - 1; n >= 0; --n) if (point_in_periodic_fixed_objectp(p, objects.items[n])) { if (objects.items[n].material.which_subclass == MATERIAL_TYPE_SELF) break; /* treat as a "nothing" object */ energy_sum += energy[index]; #ifndef SCALAR_COMPLEX { int last_index; # ifdef HAVE_MPI if (n3 == 1) last_index = j + local_y_start; else last_index = k; # else last_index = j; # endif if (last_index != 0 && 2*last_index != last_dim) energy_sum += energy[index]; } #endif break; } } } mpi_allreduce_1(&energy_sum, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); energy_sum *= Vol / H.N; return energy_sum; } /**************************************************************************/ /* Compute the integral of f(energy/field, epsilon, r) over the cell. */ cnumber compute_field_integral(function f) { int i, j, k, n1, n2, n3, n_other, n_last, rank, last_dim; #ifdef HAVE_MPI int local_n2, local_y_start, local_n3; #endif real s1, s2, s3, c1, c2, c3; int integrate_energy; real *energy = (real *) curfield; cnumber integral = {0,0}; vector3 kvector = {0,0,0}; if (!curfield || !strchr("dheDHRcv", curfield_type)) { mpi_one_fprintf(stderr, "The D or H energy/field must be loaded first.\n"); return integral; } if (curfield_type != 'v') kvector = cur_kvector; integrate_energy = strchr("DHR", curfield_type) != NULL; n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; n_other = mdata->other_dims; n_last = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); last_dim = mdata->last_dim; rank = (n3 == 1) ? (n2 == 1 ? 1 : 2) : 3; s1 = geometry_lattice.size.x / n1; s2 = geometry_lattice.size.y / n2; s3 = geometry_lattice.size.z / n3; c1 = n1 <= 1 ? 0 : geometry_lattice.size.x * 0.5; c2 = n2 <= 1 ? 0 : geometry_lattice.size.y * 0.5; c3 = n3 <= 1 ? 0 : geometry_lattice.size.z * 0.5; /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and "index" describing the corresponding index in the curfield array. This was all stolen from maxwell_eps.c...it would be better if we didn't have to cut and paste, sigh. */ #ifdef SCALAR_COMPLEX # ifndef HAVE_MPI for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j, k2 = k; int index = ((i * n2 + j) * n3 + k); # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j + local_y_start, k2 = k; int index = ((j * n1 + i) * n3 + k); # endif /* HAVE_MPI */ #else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI for (i = 0; i < n_other; ++i) for (j = 0; j < n_last; ++j) { int index = i * n_last + j; int i2, j2, k2; switch (rank) { case 2: i2 = i; j2 = j; k2 = 0; break; case 3: i2 = i / n2; j2 = i % n2; k2 = j; break; default: i2 = j; j2 = k2 = 0; break; } # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* For a real->complex transform, the last dimension is cut in half. For a 2d transform, this is taken into account in local_ny already, but for a 3d transform we must compute the new n3: */ if (n3 > 1) local_n3 = mdata->last_dim_size / 2; else local_n3 = 1; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < local_n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int index = ((j * n1 + i) * local_n3 + k); # endif /* HAVE_MPI */ #endif /* not SCALAR_COMPLEX */ { real epsilon; vector3 p; epsilon = mean_epsilon_from_matrix(mdata->eps_inv + index); p.x = i2 * s1 - c1; p.y = j2 * s2 - c2; p.z = k2 * s3 - c3; if (integrate_energy) { integral.re += ctl_convert_number_to_c( gh_call3(f, ctl_convert_number_to_scm(energy[index]), ctl_convert_number_to_scm(epsilon), ctl_convert_vector3_to_scm(p))); } else { cvector3 F; double phase_phi; scalar_complex phase; cnumber integrand; phase_phi = TWOPI * (kvector.x * (p.x/geometry_lattice.size.x) + kvector.y * (p.y/geometry_lattice.size.y) + kvector.z * (p.z/geometry_lattice.size.z)); CASSIGN_SCALAR(phase, cos(phase_phi), sin(phase_phi)); CASSIGN_MULT_RE(F.x.re, curfield[3*index+0], phase); CASSIGN_MULT_IM(F.x.im, curfield[3*index+0], phase); CASSIGN_MULT_RE(F.y.re, curfield[3*index+1], phase); CASSIGN_MULT_IM(F.y.im, curfield[3*index+1], phase); CASSIGN_MULT_RE(F.z.re, curfield[3*index+2], phase); CASSIGN_MULT_IM(F.z.im, curfield[3*index+2], phase); integrand = ctl_convert_cnumber_to_c( gh_call3(f, ctl_convert_cvector3_to_scm(F), ctl_convert_number_to_scm(epsilon), ctl_convert_vector3_to_scm(p))); integral.re += integrand.re; integral.im += integrand.im; } #ifndef SCALAR_COMPLEX { int last_index; # ifdef HAVE_MPI if (n3 == 1) last_index = j + local_y_start; else last_index = k; # else last_index = j; # endif if (last_index != 0 && 2*last_index != last_dim) { int i2c, j2c, k2c; i2c = i2 ? (n1 - i2) : 0; j2c = j2 ? (n2 - j2) : 0; k2c = k2 ? (n3 - k2) : 0; p.x = i2c * s1 - c1; p.y = j2c * s2 - c2; p.z = k2c * s3 - c3; if (integrate_energy) integral.re += ctl_convert_number_to_c( gh_call3(f, ctl_convert_number_to_scm(energy[index]), ctl_convert_number_to_scm(epsilon), ctl_convert_vector3_to_scm(p))); else { cvector3 F; double phase_phi; scalar_complex phase, Fx, Fy, Fz; cnumber integrand; Fx = curfield[3*index+0]; Fy = curfield[3*index+1]; Fz = curfield[3*index+2]; Fx.im= -Fx.im; Fy.im= -Fy.im; Fz.im= -Fz.im; phase_phi = TWOPI * (kvector.x * (p.x/geometry_lattice.size.x) + kvector.y * (p.y/geometry_lattice.size.y) + kvector.z * (p.z/geometry_lattice.size.z)); CASSIGN_SCALAR(phase, cos(phase_phi), sin(phase_phi)); CASSIGN_MULT_RE(F.x.re, Fx, phase); CASSIGN_MULT_IM(F.x.im, Fx, phase); CASSIGN_MULT_RE(F.y.re, Fy, phase); CASSIGN_MULT_IM(F.y.im, Fy, phase); CASSIGN_MULT_RE(F.z.re, Fz, phase); CASSIGN_MULT_IM(F.z.im, Fz, phase); integrand = ctl_convert_cnumber_to_c( gh_call3(f, ctl_convert_cvector3_to_scm(F), ctl_convert_number_to_scm(epsilon), ctl_convert_vector3_to_scm(p))); integral.re += integrand.re; integral.im += integrand.im; } } } #endif } } integral.re *= Vol / H.N; integral.im *= Vol / H.N; { cnumber integral_sum; mpi_allreduce(&integral, &integral_sum, 2, number, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); return integral_sum; } } number compute_energy_integral(function f) { if (!curfield || !strchr("DHR", curfield_type)) { mpi_one_fprintf(stderr, "The D or H energy density must be loaded first.\n"); return 0.0; } return cnumber_re(compute_field_integral(f)); } /**************************************************************************/ mpb-1.5/mpb/matrix-smob.h0000644000175400001440000000322612315341423012250 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MATRIX_SMOB_H #define MATRIX_SMOB_H #include "ctl-io.h" #include "my-smob.h" #include extern long scm_tc16_smob_evectmatrix; extern long scm_tc16_smob_sqmatrix; #define EVECTMATRIX_P(X) T_SMOB_P(evectmatrix, X) #define EVECTMATRIX(X) T_SMOB(evectmatrix, X) #define SAFE_EVECTMATRIX(X) SAFE_T_SMOB(evectmatrix, X) #define SQMATRIX_P(X) T_SMOB_P(sqmatrix, X) #define SQMATRIX(X) T_SMOB(sqmatrix, X) #define SAFE_SQMATRIX(X) SAFE_T_SMOB(sqmatrix, X) extern SCM evectmatrix2scm(evectmatrix m); extern SCM evectmatrix_sub2scm(evectmatrix m, int p_start, int p_end); extern SCM sqmatrix2scm(sqmatrix m); extern integer sqmatrix_size(object mo); extern cnumber sqmatrix_ref(object mo, integer i, integer j); extern void register_matrix_smobs(void); extern sqmatrix *assert_sqmatrix_smob(SCM mo); extern evectmatrix *assert_evectmatrix_smob(SCM mo); #endif /* MATRIX_SMOB_H */ mpb-1.5/mpb/matrix-smob.c0000644000175400001440000002023012315341423012235 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include #include #include "matrix-smob.h" #include "mpb.h" #ifndef HAVE_SCM_MAKE_SMOB_TYPE /* null mark function, for smobs containing no SCM objects */ static SCM mark_null(SCM obj) { (void) obj; return SCM_BOOL_F; } #endif /*************************************************************************/ long scm_tc16_smob_evectmatrix = 0; static SCM evectmatrix_p(SCM obj) { return ctl_convert_boolean_to_scm(EVECTMATRIX_P(obj)); } static int print_evectmatrix(SCM obj, SCM port, scm_print_state *pstate) { char buf[256]; evectmatrix *pm = EVECTMATRIX(obj); (void) pstate; /* unused argument */ scm_puts("#N, pm->c, pm->p); scm_puts(buf, port); #ifdef SCALAR_COMPLEX scm_puts(" complex", port); #else scm_puts(" real", port); #endif if (pm->localN < pm->N) { sprintf(buf, ", (%dx%d)x%d local", pm->localN, pm->c, pm->p); scm_puts(buf, port); } scm_putc('>', port); return 1; } static size_t free_evectmatrix(SCM obj) { evectmatrix *pm = EVECTMATRIX(obj); destroy_evectmatrix(*pm); free(pm); return 0; } #define mark_evectmatrix mark_null /*************************************************************************/ long scm_tc16_smob_sqmatrix = 0; static SCM sqmatrix_p(SCM obj) { return ctl_convert_boolean_to_scm(SQMATRIX_P(obj)); } static int print_sqmatrix(SCM obj, SCM port, scm_print_state *pstate) { char buf[256]; sqmatrix *pm = SQMATRIX(obj); (void) pstate; /* unused argument */ scm_puts("#p, pm->p); scm_puts(buf, port); #ifdef SCALAR_COMPLEX scm_puts(" complex", port); #else scm_puts(" real", port); #endif if (pm->alloc_p > pm->p) { sprintf(buf, ", %dx%d alloc", pm->alloc_p, pm->alloc_p); scm_puts(buf, port); } scm_putc('>', port); return 1; } static size_t free_sqmatrix(SCM obj) { sqmatrix *pm = SQMATRIX(obj); destroy_sqmatrix(*pm); free(pm); return 0; } #define mark_sqmatrix mark_null /*************************************************************************/ /* return a Scheme object *copy* of m */ SCM evectmatrix2scm(evectmatrix m) { SCM obj; evectmatrix *mp; CHK_MALLOC(mp, evectmatrix, 1); *mp = create_evectmatrix(m.N, m.c, m.p, m.localN, m.Nstart, m.allocN); evectmatrix_copy(*mp, m); NEWCELL_SMOB(obj, evectmatrix, mp); return obj; } /* return a Scheme object *copy* of the given columns of m */ SCM evectmatrix_slice2scm(evectmatrix m, int p_start, int p) { SCM obj; evectmatrix *mp; CHECK(p_start >= 0 && p_start + p <= m.p && p >= 0, "invalid arguments in evectmatrix_slice2scm"); CHK_MALLOC(mp, evectmatrix, 1); *mp = create_evectmatrix(m.N, m.c, p, m.localN, m.Nstart, m.allocN); evectmatrix_copy_slice(*mp, m, 0, p_start, p); NEWCELL_SMOB(obj, evectmatrix, mp); return obj; } SCM sqmatrix2scm(sqmatrix m) { SCM obj; sqmatrix *mp; CHK_MALLOC(mp, sqmatrix, 1); *mp = create_sqmatrix(m.p); sqmatrix_copy(*mp, m); NEWCELL_SMOB(obj, sqmatrix, mp); return obj; } /*************************************************************************/ void register_matrix_smobs(void) { #ifdef HAVE_SCM_MAKE_SMOB_TYPE scm_tc16_smob_evectmatrix = scm_make_smob_type("evectmatrix", 0); scm_set_smob_free(scm_tc16_smob_evectmatrix, free_evectmatrix); scm_set_smob_print(scm_tc16_smob_evectmatrix, print_evectmatrix); scm_tc16_smob_sqmatrix = scm_make_smob_type("sqmatrix", 0); scm_set_smob_free(scm_tc16_smob_sqmatrix, free_sqmatrix); scm_set_smob_print(scm_tc16_smob_sqmatrix, print_sqmatrix); #else /* old way to register smobs */ MAKE_SMOBFUNS(evectmatrix); MAKE_SMOBFUNS(sqmatrix); REGISTER_SMOBFUNS(evectmatrix); REGISTER_SMOBFUNS(sqmatrix); #endif gh_new_procedure("evectmatrix?", evectmatrix_p, 1, 0, 0); gh_new_procedure("sqmatrix?", sqmatrix_p, 1, 0, 0); } /*************************************************************************/ sqmatrix *assert_sqmatrix_smob(SCM mo) { sqmatrix *m = SAFE_SQMATRIX(mo); CHECK(m, "wrong type argument: expecting sqmatrix"); return m; } evectmatrix *assert_evectmatrix_smob(SCM mo) { evectmatrix *m = SAFE_EVECTMATRIX(mo); CHECK(m, "wrong type argument: expecting evectmatrix"); return m; } /*************************************************************************/ integer sqmatrix_size(SCM mo) { sqmatrix *m = assert_sqmatrix_smob(mo); return m->p; } cnumber sqmatrix_ref(SCM mo, integer i, integer j) { sqmatrix *m = assert_sqmatrix_smob(mo); cnumber c; CHECK(m && i >= 0 && j >= 0 && i < m->p && j < m->p, "invalid arguments to sqmatrix-ref"); c.re = SCALAR_RE(m->data[i * m->p + j]); c.im = SCALAR_IM(m->data[i * m->p + j]); return c; } /*************************************************************************/ SCM get_eigenvectors(integer b_start, integer num_bands) { CHECK(mdata, "init-params must be called before get-eigenvectors"); return evectmatrix_slice2scm(H, b_start - 1, num_bands); } void set_eigenvectors(SCM mo, integer b_start) { evectmatrix *m = assert_evectmatrix_smob(mo); CHECK(mdata, "init-params must be called before set-eigenvectors"); evectmatrix_copy_slice(H, *m, b_start - 1, 0, m->p); curfield_reset(); } SCM dot_eigenvectors(SCM mo, integer b_start) { evectmatrix *m = assert_evectmatrix_smob(mo); sqmatrix U, S; SCM obj; CHECK(mdata, "init-params must be called before dot-eigenvectors"); U = create_sqmatrix(m->p); S = create_sqmatrix(m->p); evectmatrix_XtY_slice(U, *m, H, 0, b_start - 1, m->p, S); destroy_sqmatrix(S); obj = sqmatrix2scm(U); destroy_sqmatrix(U); return obj; } void scale_eigenvector(integer b, cnumber scale) { scalar s; CHECK(mdata, "init-params must be called before scale-eigenvector"); CHECK(b > 0 && b <= H.p, "invalid band number in scale-eigenvector"); #ifndef SCALAR_COMPLEX CHECK(fabs(cnumber_im(scale) * cnumber_re(scale)) < 1e-14, "scale-eigenvector must be called with real argument in mpbi"); #endif ASSIGN_SCALAR(s, cnumber_re(scale), cnumber_im(scale)); blasglue_scal(H.n, s, H.data + b-1, H.p); curfield_reset(); } void output_eigenvectors(SCM mo, char *filename) { evectmatrix *m = assert_evectmatrix_smob(mo); evectmatrixio_writeall_raw(filename, *m); curfield_reset(); } SCM input_eigenvectors(char *filename, integer num_bands) { SCM mo = get_eigenvectors(1, num_bands); { evectmatrix *m = assert_evectmatrix_smob(mo); evectmatrixio_readall_raw(filename, *m); } return mo; } void save_eigenvectors(char *filename) { CHECK(mdata, "init-params must be called before save-eigenvectors"); printf("Saving eigenvectors to \"%s\"...\n", filename); evectmatrixio_writeall_raw(filename, H); } void load_eigenvectors(char *filename) { CHECK(mdata, "init-params must be called before load-eigenvectors"); printf("Loading eigenvectors from \"%s\"...\n", filename); evectmatrixio_readall_raw(filename, H); curfield_reset(); } /*************************************************************************/ mpb-1.5/mpb/Makefile.in0000644000175400001440000014271312315337034011712 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # libctl: flexible Guile-based control files for scientific software # Copyright (C) 1998, 1999-2012, Steven G. Johnson # # This file may be used without restriction. It is in the public # domain, and is NOT restricted by the terms of any GNU license. # # This 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. # # Steven G. Johnson can be contacted at stevenj@alum.mit.edu. ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = mpb@MPB_SUFFIX@$(EXEEXT) subdir = mpb DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/mpb.scm.in $(srcdir)/mpb-split-preinstall.in \ $(top_srcdir)/depcomp $(dist_man_MANS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = mpb.scm mpb-split-preinstall CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgdatadir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = mpb@MPB_SUFFIX@-epsilon.$(OBJEXT) \ mpb@MPB_SUFFIX@-epsilon_file.$(OBJEXT) \ mpb@MPB_SUFFIX@-field-smob.$(OBJEXT) \ mpb@MPB_SUFFIX@-fields.$(OBJEXT) \ mpb@MPB_SUFFIX@-material_grid.$(OBJEXT) \ mpb@MPB_SUFFIX@-material_grid_opt.$(OBJEXT) \ mpb@MPB_SUFFIX@-matrix-smob.$(OBJEXT) \ mpb@MPB_SUFFIX@-mpb.$(OBJEXT) am_mpb@MPB_SUFFIX@_OBJECTS = $(am__objects_1) nodist_mpb@MPB_SUFFIX@_OBJECTS = mpb@MPB_SUFFIX@-main.$(OBJEXT) \ mpb@MPB_SUFFIX@-geom.$(OBJEXT) \ mpb@MPB_SUFFIX@-ctl-io.$(OBJEXT) mpb@MPB_SUFFIX@_OBJECTS = $(am_mpb@MPB_SUFFIX@_OBJECTS) \ $(nodist_mpb@MPB_SUFFIX@_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(top_builddir)/src/matrixio/libmatrixio.a \ $(top_builddir)/src/libmpb@MPB_SUFFIX@.la \ $(am__DEPENDENCIES_1) mpb@MPB_SUFFIX@_DEPENDENCIES = $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = mpb@MPB_SUFFIX@_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(mpb@MPB_SUFFIX@_LDFLAGS) $(LDFLAGS) \ -o $@ 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; }; \ } SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(mpb@MPB_SUFFIX@_SOURCES) $(nodist_mpb@MPB_SUFFIX@_SOURCES) DIST_SOURCES = $(mpb@MPB_SUFFIX@_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) DATA = $(nodist_pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ # gen-ctl-io program GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ # The following variables should be detected and set by autoconf: # libctl install. dir., e.g. /usr/local/share/libctl LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SPECIFICATION_FILE = mpb.scm EXTRA_DIST = mpb.scm.in nodist_pkgdata_DATA = $(SPECIFICATION_FILE) MY_SOURCES = epsilon.c epsilon_file.c field-smob.c fields.c \ material_grid.c material_grid_opt.c matrix-smob.c mpb.c field-smob.h matrix-smob.h mpb.h my-smob.h MY_LIBS = $(top_builddir)/src/matrixio/libmatrixio.a $(top_builddir)/src/libmpb@MPB_SUFFIX@.la $(NLOPT_LIB) MY_CPPFLAGS = -I$(top_srcdir)/src/util -I$(top_srcdir)/src/matrices -I$(top_srcdir)/src/matrixio -I$(top_srcdir)/src/maxwell MY_DEFS = -DHAVE_CTL_HOOKS=1 -DHAVE_CTL_EXPORT_HOOK=1 # what is printed out when invoking your program with --version: VERSION_STRING = "mpb@MPB_SUFFIX@ @VERSION@, Copyright (C) 1999-2012, MIT" dist_man_MANS = mpb-split.1 mpb.1 @MPI_FALSE@bin_SCRIPTS = mpb@MPB_SUFFIX@-split ############################################################################## # don't (normally) edit below except to replace "mpb" with your name # ############################################################################## CTL_DEFS = -DCTL_SCM='"'$(LIBCTL_DIR)/base/ctl.scm'"' \ -DINCLUDE_SCM='"'$(LIBCTL_DIR)/base/include.scm'"' \ -DSPEC_SCM='"'$(pkgdatadir)/$(SPECIFICATION_FILE)'"' \ -DVERSION_STRING='"'$(VERSION_STRING)'"' mpb@MPB_SUFFIX@_SOURCES = $(MY_SOURCES) nodist_mpb@MPB_SUFFIX@_SOURCES = main.c geom.c ctl-io.h ctl-io.c BUILT_SOURCES = $(nodist_mpb@MPB_SUFFIX@_SOURCES) mpb@MPB_SUFFIX@_LDADD = $(MY_LIBS) mpb@MPB_SUFFIX@_LDFLAGS = $(MY_LDFLAGS) mpb@MPB_SUFFIX@_CPPFLAGS = $(MY_CPPFLAGS) $(MY_DEFS) $(CTL_DEFS) $(CTL_H_CPPFLAG) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mpb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mpb/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mpb.scm: $(top_builddir)/config.status $(srcdir)/mpb.scm.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mpb-split-preinstall: $(top_builddir)/config.status $(srcdir)/mpb-split-preinstall.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mpb@MPB_SUFFIX@$(EXEEXT): $(mpb@MPB_SUFFIX@_OBJECTS) $(mpb@MPB_SUFFIX@_DEPENDENCIES) $(EXTRA_mpb@MPB_SUFFIX@_DEPENDENCIES) @rm -f mpb@MPB_SUFFIX@$(EXEEXT) $(AM_V_CCLD)$(mpb@MPB_SUFFIX@_LINK) $(mpb@MPB_SUFFIX@_OBJECTS) $(mpb@MPB_SUFFIX@_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-fields.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-geom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mpb@MPB_SUFFIX@-epsilon.o: epsilon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-epsilon.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Tpo -c -o mpb@MPB_SUFFIX@-epsilon.o `test -f 'epsilon.c' || echo '$(srcdir)/'`epsilon.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='epsilon.c' object='mpb@MPB_SUFFIX@-epsilon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-epsilon.o `test -f 'epsilon.c' || echo '$(srcdir)/'`epsilon.c mpb@MPB_SUFFIX@-epsilon.obj: epsilon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-epsilon.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Tpo -c -o mpb@MPB_SUFFIX@-epsilon.obj `if test -f 'epsilon.c'; then $(CYGPATH_W) 'epsilon.c'; else $(CYGPATH_W) '$(srcdir)/epsilon.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='epsilon.c' object='mpb@MPB_SUFFIX@-epsilon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-epsilon.obj `if test -f 'epsilon.c'; then $(CYGPATH_W) 'epsilon.c'; else $(CYGPATH_W) '$(srcdir)/epsilon.c'; fi` mpb@MPB_SUFFIX@-epsilon_file.o: epsilon_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-epsilon_file.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Tpo -c -o mpb@MPB_SUFFIX@-epsilon_file.o `test -f 'epsilon_file.c' || echo '$(srcdir)/'`epsilon_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='epsilon_file.c' object='mpb@MPB_SUFFIX@-epsilon_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-epsilon_file.o `test -f 'epsilon_file.c' || echo '$(srcdir)/'`epsilon_file.c mpb@MPB_SUFFIX@-epsilon_file.obj: epsilon_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-epsilon_file.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Tpo -c -o mpb@MPB_SUFFIX@-epsilon_file.obj `if test -f 'epsilon_file.c'; then $(CYGPATH_W) 'epsilon_file.c'; else $(CYGPATH_W) '$(srcdir)/epsilon_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-epsilon_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='epsilon_file.c' object='mpb@MPB_SUFFIX@-epsilon_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-epsilon_file.obj `if test -f 'epsilon_file.c'; then $(CYGPATH_W) 'epsilon_file.c'; else $(CYGPATH_W) '$(srcdir)/epsilon_file.c'; fi` mpb@MPB_SUFFIX@-field-smob.o: field-smob.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-field-smob.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Tpo -c -o mpb@MPB_SUFFIX@-field-smob.o `test -f 'field-smob.c' || echo '$(srcdir)/'`field-smob.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='field-smob.c' object='mpb@MPB_SUFFIX@-field-smob.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-field-smob.o `test -f 'field-smob.c' || echo '$(srcdir)/'`field-smob.c mpb@MPB_SUFFIX@-field-smob.obj: field-smob.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-field-smob.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Tpo -c -o mpb@MPB_SUFFIX@-field-smob.obj `if test -f 'field-smob.c'; then $(CYGPATH_W) 'field-smob.c'; else $(CYGPATH_W) '$(srcdir)/field-smob.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-field-smob.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='field-smob.c' object='mpb@MPB_SUFFIX@-field-smob.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-field-smob.obj `if test -f 'field-smob.c'; then $(CYGPATH_W) 'field-smob.c'; else $(CYGPATH_W) '$(srcdir)/field-smob.c'; fi` mpb@MPB_SUFFIX@-fields.o: fields.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-fields.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-fields.Tpo -c -o mpb@MPB_SUFFIX@-fields.o `test -f 'fields.c' || echo '$(srcdir)/'`fields.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-fields.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-fields.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fields.c' object='mpb@MPB_SUFFIX@-fields.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-fields.o `test -f 'fields.c' || echo '$(srcdir)/'`fields.c mpb@MPB_SUFFIX@-fields.obj: fields.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-fields.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-fields.Tpo -c -o mpb@MPB_SUFFIX@-fields.obj `if test -f 'fields.c'; then $(CYGPATH_W) 'fields.c'; else $(CYGPATH_W) '$(srcdir)/fields.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-fields.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-fields.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fields.c' object='mpb@MPB_SUFFIX@-fields.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-fields.obj `if test -f 'fields.c'; then $(CYGPATH_W) 'fields.c'; else $(CYGPATH_W) '$(srcdir)/fields.c'; fi` mpb@MPB_SUFFIX@-material_grid.o: material_grid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-material_grid.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Tpo -c -o mpb@MPB_SUFFIX@-material_grid.o `test -f 'material_grid.c' || echo '$(srcdir)/'`material_grid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='material_grid.c' object='mpb@MPB_SUFFIX@-material_grid.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-material_grid.o `test -f 'material_grid.c' || echo '$(srcdir)/'`material_grid.c mpb@MPB_SUFFIX@-material_grid.obj: material_grid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-material_grid.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Tpo -c -o mpb@MPB_SUFFIX@-material_grid.obj `if test -f 'material_grid.c'; then $(CYGPATH_W) 'material_grid.c'; else $(CYGPATH_W) '$(srcdir)/material_grid.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='material_grid.c' object='mpb@MPB_SUFFIX@-material_grid.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-material_grid.obj `if test -f 'material_grid.c'; then $(CYGPATH_W) 'material_grid.c'; else $(CYGPATH_W) '$(srcdir)/material_grid.c'; fi` mpb@MPB_SUFFIX@-material_grid_opt.o: material_grid_opt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-material_grid_opt.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Tpo -c -o mpb@MPB_SUFFIX@-material_grid_opt.o `test -f 'material_grid_opt.c' || echo '$(srcdir)/'`material_grid_opt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='material_grid_opt.c' object='mpb@MPB_SUFFIX@-material_grid_opt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-material_grid_opt.o `test -f 'material_grid_opt.c' || echo '$(srcdir)/'`material_grid_opt.c mpb@MPB_SUFFIX@-material_grid_opt.obj: material_grid_opt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-material_grid_opt.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Tpo -c -o mpb@MPB_SUFFIX@-material_grid_opt.obj `if test -f 'material_grid_opt.c'; then $(CYGPATH_W) 'material_grid_opt.c'; else $(CYGPATH_W) '$(srcdir)/material_grid_opt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-material_grid_opt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='material_grid_opt.c' object='mpb@MPB_SUFFIX@-material_grid_opt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-material_grid_opt.obj `if test -f 'material_grid_opt.c'; then $(CYGPATH_W) 'material_grid_opt.c'; else $(CYGPATH_W) '$(srcdir)/material_grid_opt.c'; fi` mpb@MPB_SUFFIX@-matrix-smob.o: matrix-smob.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-matrix-smob.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Tpo -c -o mpb@MPB_SUFFIX@-matrix-smob.o `test -f 'matrix-smob.c' || echo '$(srcdir)/'`matrix-smob.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrix-smob.c' object='mpb@MPB_SUFFIX@-matrix-smob.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-matrix-smob.o `test -f 'matrix-smob.c' || echo '$(srcdir)/'`matrix-smob.c mpb@MPB_SUFFIX@-matrix-smob.obj: matrix-smob.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-matrix-smob.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Tpo -c -o mpb@MPB_SUFFIX@-matrix-smob.obj `if test -f 'matrix-smob.c'; then $(CYGPATH_W) 'matrix-smob.c'; else $(CYGPATH_W) '$(srcdir)/matrix-smob.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-matrix-smob.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrix-smob.c' object='mpb@MPB_SUFFIX@-matrix-smob.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-matrix-smob.obj `if test -f 'matrix-smob.c'; then $(CYGPATH_W) 'matrix-smob.c'; else $(CYGPATH_W) '$(srcdir)/matrix-smob.c'; fi` mpb@MPB_SUFFIX@-mpb.o: mpb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-mpb.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Tpo -c -o mpb@MPB_SUFFIX@-mpb.o `test -f 'mpb.c' || echo '$(srcdir)/'`mpb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpb.c' object='mpb@MPB_SUFFIX@-mpb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-mpb.o `test -f 'mpb.c' || echo '$(srcdir)/'`mpb.c mpb@MPB_SUFFIX@-mpb.obj: mpb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-mpb.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Tpo -c -o mpb@MPB_SUFFIX@-mpb.obj `if test -f 'mpb.c'; then $(CYGPATH_W) 'mpb.c'; else $(CYGPATH_W) '$(srcdir)/mpb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-mpb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpb.c' object='mpb@MPB_SUFFIX@-mpb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-mpb.obj `if test -f 'mpb.c'; then $(CYGPATH_W) 'mpb.c'; else $(CYGPATH_W) '$(srcdir)/mpb.c'; fi` mpb@MPB_SUFFIX@-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-main.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-main.Tpo -c -o mpb@MPB_SUFFIX@-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-main.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='mpb@MPB_SUFFIX@-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c mpb@MPB_SUFFIX@-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-main.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-main.Tpo -c -o mpb@MPB_SUFFIX@-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-main.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='mpb@MPB_SUFFIX@-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` mpb@MPB_SUFFIX@-geom.o: geom.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-geom.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-geom.Tpo -c -o mpb@MPB_SUFFIX@-geom.o `test -f 'geom.c' || echo '$(srcdir)/'`geom.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-geom.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-geom.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='geom.c' object='mpb@MPB_SUFFIX@-geom.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-geom.o `test -f 'geom.c' || echo '$(srcdir)/'`geom.c mpb@MPB_SUFFIX@-geom.obj: geom.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-geom.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-geom.Tpo -c -o mpb@MPB_SUFFIX@-geom.obj `if test -f 'geom.c'; then $(CYGPATH_W) 'geom.c'; else $(CYGPATH_W) '$(srcdir)/geom.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-geom.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-geom.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='geom.c' object='mpb@MPB_SUFFIX@-geom.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-geom.obj `if test -f 'geom.c'; then $(CYGPATH_W) 'geom.c'; else $(CYGPATH_W) '$(srcdir)/geom.c'; fi` mpb@MPB_SUFFIX@-ctl-io.o: ctl-io.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-ctl-io.o -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Tpo -c -o mpb@MPB_SUFFIX@-ctl-io.o `test -f 'ctl-io.c' || echo '$(srcdir)/'`ctl-io.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctl-io.c' object='mpb@MPB_SUFFIX@-ctl-io.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-ctl-io.o `test -f 'ctl-io.c' || echo '$(srcdir)/'`ctl-io.c mpb@MPB_SUFFIX@-ctl-io.obj: ctl-io.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mpb@MPB_SUFFIX@-ctl-io.obj -MD -MP -MF $(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Tpo -c -o mpb@MPB_SUFFIX@-ctl-io.obj `if test -f 'ctl-io.c'; then $(CYGPATH_W) 'ctl-io.c'; else $(CYGPATH_W) '$(srcdir)/ctl-io.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Tpo $(DEPDIR)/mpb@MPB_SUFFIX@-ctl-io.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctl-io.c' object='mpb@MPB_SUFFIX@-ctl-io.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpb@MPB_SUFFIX@_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpb@MPB_SUFFIX@-ctl-io.obj `if test -f 'ctl-io.c'; then $(CYGPATH_W) 'ctl-io.c'; else $(CYGPATH_W) '$(srcdir)/ctl-io.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-nodist_pkgdataDATA: $(nodist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(nodist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-nodist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-nodist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man \ uninstall-nodist_pkgdataDATA uninstall-man: uninstall-man1 .MAKE: all check check-am install install-am install-strip .PHONY: all all-am check check-am check-local clean clean-binPROGRAMS \ clean-generic clean-libtool clean-local cscopelist-am ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-binSCRIPTS \ 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-man1 \ install-nodist_pkgdataDATA install-pdf install-pdf-am \ install-ps 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-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-binSCRIPTS uninstall-man uninstall-man1 \ uninstall-nodist_pkgdataDATA check-local: mpb@MPB_SUFFIX@ ./mpb@MPB_SUFFIX@ $(top_srcdir)/examples/check.ctl mpb@MPB_SUFFIX@-split: mpb-split-preinstall sed "s%\./mpb%"$(prefix)/bin/"mpb@MPB_SUFFIX@%g" \ mpb-split-preinstall > $@ chmod u+x $@ main.c: $(LIBCTL_DIR)/base/main.c cp -f $(LIBCTL_DIR)/base/main.c $@ geom.c: $(LIBCTL_DIR)/utils/geom.c cp -f $(LIBCTL_DIR)/utils/geom.c $@ ctl-io.c: $(SPECIFICATION_FILE) $(LIBCTL_DIR)/utils/geom.scm $(GEN_CTL_IO) --code -o $@ $(SPECIFICATION_FILE) $(LIBCTL_DIR) ctl-io.h: $(SPECIFICATION_FILE) $(LIBCTL_DIR)/utils/geom.scm $(GEN_CTL_IO) --header -o $@ $(SPECIFICATION_FILE) $(LIBCTL_DIR) clean-local: rm -f ctl-io.* main.* geom.* # 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: mpb-1.5/mpb/mpb.h0000644000175400001440000000775612315341423010600 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef MPB_H #define MPB_H #include #include #include /* this integer flag is defined by main.c from libctl, and is set when the user runs the program with --verbose */ extern int verbose; #define MAX2(a,b) ((a) > (b) ? (a) : (b)) #define MIN2(a,b) ((a) < (b) ? (a) : (b)) #define TWOPI 6.2831853071795864769252867665590057683943388 /**************************************************************************/ extern void get_epsilon_file_func(const char *fname, maxwell_dielectric_function *func, void **func_data); extern void destroy_epsilon_file_func_data(void *func_data); extern real linear_interpolate(real rx, real ry, real rz, real *data, int nx, int ny, int nz, int stride); /**************************************************************************/ /* global variables for retaining data about the eigenvectors between calls from Guile: */ #define MAX_NWORK 10 extern int nwork_alloc; #define NUM_FFT_BANDS 20 /* max number of bands to FFT at a time */ extern maxwell_data *mdata; extern maxwell_target_data *mtdata; extern evectmatrix H, W[MAX_NWORK], Hblock; extern vector3 cur_kvector; extern scalar_complex *curfield; extern int curfield_band; extern char curfield_type; extern void curfield_reset(void); /* R[i]/G[i] are lattice/reciprocal-lattice vectors */ extern real R[3][3], G[3][3]; extern matrix3x3 Rm, Gm; /* same thing, but matrix3x3 */ extern real Vol; /* computational cell volume = |det Rm| */ /* index of current kpoint, for labeling output */ extern int kpoint_index; /* in fields.c */ extern void compute_field_squared(void); void get_efield(integer which_band); real mean_epsilon_from_matrix(const symmetric_matrix *eps_inv); /**************************************************************************/ extern void vector3_to_arr(real arr[3], vector3 v); extern void matrix3x3_to_arr(real arr[3][3], matrix3x3 m); extern scalar_complex cnumber2cscalar(cnumber c); extern cnumber cscalar2cnumber(scalar_complex cs); extern cvector3 cscalar32cvector3(const scalar_complex *cs); extern void cvector32cscalar3(scalar_complex *cs, cvector3 v); /**************************************************************************/ /* in epsilon.c */ extern int no_size_x, no_size_y, no_size_z; extern geom_box_tree geometry_tree; extern void reset_epsilon(void); extern void init_epsilon(void); /**************************************************************************/ /* material_grid.c */ typedef enum { U_MIN = 0, U_PROD = 1, U_SUM = 2 } material_grid_kinds; extern real material_grid_val(vector3 p, const material_grid *g); extern double matgrid_val(vector3 p, geom_box_tree tp, int oi, const material_grid *mg); material_grid *get_material_grids(geometric_object_list g, int *ngrids); int material_grids_ntot(const material_grid *grids, int ngrids); void material_grids_set(const double *u, material_grid *grids, int ngrids); void material_grids_get(double *u, const material_grid *grids, int ngrids); void material_grids_addgradient(double *v, double scalegrad, int band, const material_grid *grids, int ngrids); /**************************************************************************/ extern const char *parity_string(maxwell_data *d); #endif /* MPB_H */ mpb-1.5/mpb/field-smob.h0000644000175400001440000000354012315341423012026 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef FIELD_SMOB_H #define FIELD_SMOB_H #include "ctl-io.h" #include "my-smob.h" #include extern long scm_tc16_smob_field_smob; typedef enum { RSCALAR_FIELD_SMOB, CVECTOR_FIELD_SMOB, CSCALAR_FIELD_SMOB } field_smob_type; typedef struct { field_smob_type type; char type_char; union { real *rs; scalar_complex *cv; scalar_complex *cs; } f; int nx, ny, nz, N; int local_ny, local_y_start; int last_dim, last_dim_size, other_dims; } field_smob; #define FIELD_P(X) T_SMOB_P(field_smob, X) #define FIELD(X) T_SMOB(field_smob, X) #define SAFE_FIELD(X) (cur_fieldp(X) ? update_curfield_smob() : SAFE_T_SMOB(field_smob, X)) #define RSCALAR_FIELD_P(X) (FIELD_P(X) && ((FIELD(X))->type == RSCALAR_FIELD_SMOB)) #define CSCALAR_FIELD_P(X) (FIELD_P(X) && ((FIELD(X))->type == CSCALAR_FIELD_SMOB)) #define CVECTOR_FIELD_P(X) (FIELD_P(X) && ((FIELD(X))->type == CVECTOR_FIELD_SMOB)) extern field_smob *update_curfield_smob(void); extern void register_field_smobs(void); extern field_smob *assert_field_smob(SCM fo); #endif /* FIELD_SMOB_H */ mpb-1.5/mpb/mpb.c0000644000175400001440000007041312315341423010561 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /**************************************************************************/ /* Here, we define the external functions callable from Guile, as defined by mpb.scm. */ /**************************************************************************/ #include #include #include #include #include #include #include /* Header files for my eigensolver routines: */ #include "config.h" #include #include #include #include #include #include #include /* Header file for the ctl-file (Guile) interface; automatically generated from mpb.scm */ #include /* Routines from libctl/utils/geom.c: */ #include /* shared declarations for the files in mpb-ctl: */ #include "mpb.h" /* matrix/field "smobs" (Scheme objects) */ #include "matrix-smob.h" #include "field-smob.h" #if defined(DEBUG) && defined(HAVE_FEENABLEEXCEPT) # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include # if !HAVE_DECL_FEENABLEEXCEPT int feenableexcept (int EXCEPTS); # endif #endif /**************************************************************************/ /* The following are hook functions called from main() when starting the program and just before exiting. We use them to initialize MPI and OpenMP */ #if defined(SCALAR_SINGLE_PREC) # define FFTW(x) fftwf_ ## x #elif defined(SCALAR_LONG_DOUBLE_PREC) # define FFTW(x) fftwl_ ## x #else # define FFTW(x) fftw_ ## x #endif #ifdef USE_OPENMP # include # include #endif #if defined(HAVE_MPI) && (defined(HAVE_LIBFFTW3F_MPI) || defined(HAVE_LIBFFTW3L_MPI) || defined(HAVE_LIBFFTW3_MPI)) # define HAVE_FFTW3_MPI # include #endif void ctl_start_hook(int *argc, char ***argv) { MPI_Init(argc, argv); #ifdef USE_OPENMP { char *senthread = getenv("OMP_NUM_THREADS"); int i, nthread = senthread ? (atoi(senthread) > 0 ? atoi(senthread) : 1) : 1; for (i = 0; i < *argc; ++i) if (!strncasecmp("--nthread=", (*argv)[i], 10)) { int j; CHECK((nthread=atoi((*argv)[i]+10)) > 0, "invalid argument for --nthread=..."); *argc -= 1; for (j = i; j < *argc; ++j) (*argv)[j] = (*argv)[j+1]; } omp_set_num_threads(nthread); CHECK(FFTW(init_threads)(), "error initializing threaded FFTW"); FFTW(plan_with_nthreads)(nthread); } #endif #ifdef HAVE_FFTW3_MPI FFTW(mpi_init)(); #endif #ifdef HAVE_LIBCTL_QUIET { extern int libctl_quiet; libctl_quiet = !mpi_is_master(); } #endif /* disable: Guile garbage collector sometimes triggers an fp exception */ #if defined(DEBUG) && defined(HAVE_FEENABLEEXCEPT) && 0 feenableexcept(FE_INVALID | FE_OVERFLOW); /* crash on NaN/overflow */ #endif } void ctl_stop_hook(void) { #ifdef HAVE_FFTW3_MPI FFTW(mpi_cleanup)(); #endif MPI_Finalize(); } /* The following is a hook function called from main() when initializing Guile, which can export any additional symbols to Guile: */ void ctl_export_hook(void) { register_matrix_smobs(); register_field_smobs(); } /**************************************************************************/ /* Some Guile-callable functions so that ctl files can know something about MPI. */ boolean mpi_is_masterp(void) { return mpi_is_master(); } boolean using_mpip(void) { #ifdef HAVE_MPI return 1; #else return 0; #endif } integer mpi_num_procs(void) { int num_procs; MPI_Comm_size(MPI_COMM_WORLD, &num_procs); return num_procs; } integer mpi_proc_index(void) { int proc_num; MPI_Comm_rank(MPI_COMM_WORLD, &proc_num); return proc_num; } number mpi_max(number num) { double x = num, xmax; mpi_allreduce(&x, &xmax, 1, double, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD); return xmax; } /**************************************************************************/ /* a couple of utilities to convert libctl data types to the data types of the eigensolver & maxwell routines: */ void vector3_to_arr(real arr[3], vector3 v) { arr[0] = v.x; arr[1] = v.y; arr[2] = v.z; } void matrix3x3_to_arr(real arr[3][3], matrix3x3 m) { vector3_to_arr(arr[0], m.c0); vector3_to_arr(arr[1], m.c1); vector3_to_arr(arr[2], m.c2); } /**************************************************************************/ /* global variables for retaining data about the eigenvectors between calls from Guile: */ int nwork_alloc = 0; maxwell_data *mdata = NULL; maxwell_target_data *mtdata = NULL; evectmatrix H, W[MAX_NWORK], Hblock; vector3 cur_kvector; scalar_complex *curfield = NULL; int curfield_band; char curfield_type = '-'; void curfield_reset(void) { curfield = NULL; curfield_type = '-'; } /* R[i]/G[i] are lattice/reciprocal-lattice vectors */ real R[3][3], G[3][3]; matrix3x3 Rm, Gm; /* same thing, but matrix3x3 */ real Vol; /* computational cell volume = |det Rm| */ /* index of current kpoint, for labeling output */ int kpoint_index = 0; /**************************************************************************/ scalar_complex cnumber2cscalar(cnumber c) { scalar_complex cs; CASSIGN_SCALAR(cs, cnumber_re(c), cnumber_im(c)); return cs; } cnumber cscalar2cnumber(scalar_complex cs) { return make_cnumber(CSCALAR_RE(cs), CSCALAR_IM(cs)); } cvector3 cscalar32cvector3(const scalar_complex *cs) { cvector3 v; v.x = cscalar2cnumber(cs[0]); v.y = cscalar2cnumber(cs[1]); v.z = cscalar2cnumber(cs[2]); return v; } void cvector32cscalar3(scalar_complex *cs, cvector3 v) { cs[0] = cnumber2cscalar(v.x); cs[1] = cnumber2cscalar(v.y); cs[2] = cnumber2cscalar(v.z); } /**************************************************************************/ /* initialize the field to random numbers; should only be called after init-params. (Guile-callable.) */ void randomize_fields(void) { int i; if (!mdata) return; mpi_one_printf("Initializing fields to random numbers...\n"); for (i = 0; i < H.n * H.p; ++i) { ASSIGN_SCALAR(H.data[i], rand() * 1.0 / RAND_MAX, rand() * 1.0 / RAND_MAX); } } /**************************************************************************/ /* Guile-callable functions for getting/setting the kpoint index. */ integer get_kpoint_index(void) { return kpoint_index; } void set_kpoint_index(integer i) { kpoint_index = i; } /**************************************************************************/ /* return a string describing the current parity, used for frequency and filename prefixes */ const char *parity_string(maxwell_data *d) { static char s[128]; strcpy(s, ""); if (d->parity & EVEN_Z_PARITY) strcat(s, (d->nz == 1) ? "te" : "zeven"); else if (d->parity & ODD_Z_PARITY) strcat(s, (d->nz == 1) ? "tm" : "zodd"); if (d->parity & EVEN_Y_PARITY) strcat(s, "yeven"); else if (d->parity & ODD_Y_PARITY) strcat(s, "yodd"); return s; } /* Set the current parity to solve for. (init-params should have already been called. (Guile-callable; see mpb.scm.) p >= 0 means a bitwise OR of the various parity constants from maxwell.h (NO_PARITY, EVEN_Z_PARITY, etcetera). p = -1 means the parity of the previous call, or NO_PARITY if this is the first call */ void set_parity(integer p) { static int last_p = -2; /* initialize to some non-value */ if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called before set-parity!\n"); return; } if (p == -1) p = last_p < 0 ? NO_PARITY : last_p; set_maxwell_data_parity(mdata, p); CHECK(mdata->parity == p, "k vector incompatible with parity"); mpi_one_printf("Solving for band polarization: %s.\n", parity_string(mdata)); last_p = p; set_kpoint_index(0); /* reset index */ } /**************************************************************************/ /* Guile-callable function: init-params, which initializes any data that we need for the eigenvalue calculation. When this function is called, the input variables (the geometry, etcetera) have already been read into the global variables defined in ctl-io.h. p is the parity to use for the coming calculation, although this can be changed by calling set-parity. p is interpreted in the same way as for set-parity. If reset_fields is false, then any fields from a previous run are retained if they are of the same dimensions. Otherwise, new fields are allocated and initialized to random numbers. */ void init_params(integer p, boolean reset_fields) { int i, local_N, N_start, alloc_N; int nx, ny, nz; int have_old_fields = 0; int block_size; /* Output a bunch of stuff so that the user can see what we're doing and what we've read in. */ mpi_one_printf("init-params: initializing eigensolver data\n"); #ifndef SCALAR_COMPLEX mpi_one_printf(" -- assuming INVERSION SYMMETRY in the geometry.\n"); #endif mpi_one_printf("Computing %d bands with %e tolerance.\n", num_bands, tolerance); if (target_freq != 0.0) mpi_one_printf("Target frequency is %g\n", target_freq); get_grid_size_n(&nx, &ny, &nz); { int true_rank = nz > 1 ? 3 : (ny > 1 ? 2 : 1); if (true_rank < dimensions) dimensions = true_rank; else if (true_rank > dimensions) { mpi_one_fprintf(stderr, "WARNING: rank of grid is > dimensions.\n" " setting extra grid dims. to 1.\n"); /* force extra dims to be 1: */ if (dimensions <= 2) nz = 1; if (dimensions <= 1) ny = 1; } } mpi_one_printf("Working in %d dimensions.\n", dimensions); mpi_one_printf("Grid size is %d x %d x %d.\n", nx, ny, nz); if (eigensolver_block_size != 0 && eigensolver_block_size < num_bands) { block_size = eigensolver_block_size; if (block_size < 0) { /* Guess a block_size near -block_size, chosen so that all blocks are nearly equal in size: */ block_size = (num_bands - block_size - 1) / (-block_size); block_size = (num_bands + block_size - 1) / block_size; } mpi_one_printf("Solving for %d bands at a time.\n", block_size); } else block_size = num_bands; if (mdata) { /* need to clean up from previous init_params call */ if (nx == mdata->nx && ny == mdata->ny && nz == mdata->nz && block_size == Hblock.alloc_p && num_bands == H.p && eigensolver_nwork == nwork_alloc) have_old_fields = 1; /* don't need to reallocate */ else { destroy_evectmatrix(H); for (i = 0; i < nwork_alloc; ++i) destroy_evectmatrix(W[i]); if (Hblock.data != H.data) destroy_evectmatrix(Hblock); } destroy_maxwell_target_data(mtdata); mtdata = NULL; destroy_maxwell_data(mdata); mdata = NULL; curfield_reset(); } else srand(time(NULL)); /* init random seed for field initialization */ if (deterministicp) { /* check input variable "deterministic?" */ /* seed should be the same for each run, although it should be different for each process: */ int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); srand(314159 * (rank + 1)); } mpi_one_printf("Creating Maxwell data...\n"); mdata = create_maxwell_data(nx, ny, nz, &local_N, &N_start, &alloc_N, block_size, NUM_FFT_BANDS); CHECK(mdata, "NULL mdata"); if (target_freq != 0.0) mtdata = create_maxwell_target_data(mdata, target_freq); else mtdata = NULL; if (!have_old_fields) { mpi_one_printf("Allocating fields...\n"); H = create_evectmatrix(nx * ny * nz, 2, num_bands, local_N, N_start, alloc_N); nwork_alloc = eigensolver_nwork; for (i = 0; i < nwork_alloc; ++i) W[i] = create_evectmatrix(nx * ny * nz, 2, block_size, local_N, N_start, alloc_N); if (block_size < num_bands) Hblock = create_evectmatrix(nx * ny * nz, 2, block_size, local_N, N_start, alloc_N); else Hblock = H; } init_epsilon(); mpi_one_printf("%d k-points:\n", k_points.num_items); for (i = 0; i < k_points.num_items; ++i) mpi_one_printf(" (%g,%g,%g)\n", k_points.items[i].x, k_points.items[i].y, k_points.items[i].z); set_parity(p); if (!have_old_fields || reset_fields) randomize_fields(); { int ierr = check_maxwell_dielectric(mdata, negative_epsilon_okp); if (ierr == 1) mpi_one_fprintf(stderr, "ERROR: non positive-definite dielectric tensor\n"); else if (ierr == 2) mpi_one_fprintf(stderr, "ERROR: dielectric tensor must not couple xy " "plane with z direction for 2D TE/TM calculations\n"); CHECK(!ierr, "invalid dielectric function\n"); } evectmatrix_flops = eigensolver_flops; /* reset, if changed */ } /**************************************************************************/ /* When we are solving for a few bands at a time, we solve for the upper bands by "deflation"--by continually orthogonalizing them against the already-computed lower bands. (This constraint commutes with the eigen-operator, of course, so all is well.) */ typedef struct { evectmatrix Y; /* the vectors to orthogonalize against; Y must itself be normalized (Yt Y = 1) */ int p; /* the number of columns of Y to orthogonalize against */ scalar *S; /* a matrix for storing the dot products; should have at least p * X.p elements (see below for X) */ scalar *S2; /* a scratch matrix the same size as S */ } deflation_data; static void deflation_constraint(evectmatrix X, void *data) { deflation_data *d = (deflation_data *) data; CHECK(X.n == d->Y.n && d->Y.p >= d->p, "invalid dimensions"); /* (Sigh...call the BLAS functions directly since we are not using all the columns of Y...evectmatrix is not set up for this case.) */ /* compute S = Xt Y (i.e. all the dot products): */ blasglue_gemm('C', 'N', X.p, d->p, X.n, 1.0, X.data, X.p, d->Y.data, d->Y.p, 0.0, d->S2, d->p); mpi_allreduce(d->S2, d->S, d->p * X.p * SCALAR_NUMVALS, real, SCALAR_MPI_TYPE, MPI_SUM, MPI_COMM_WORLD); /* compute X = X - Y*St = (1 - Y Yt) X */ blasglue_gemm('N', 'C', X.n, X.p, d->p, -1.0, d->Y.data, d->Y.p, d->S, d->p, 1.0, X.data, X.p); } /**************************************************************************/ /* Solve for the bands at a given k point. Must only be called after init_params! */ void solve_kpoint(vector3 kvector) { int i, total_iters = 0, ib, ib0; real *eigvals; real k[3]; int flags; deflation_data deflation; int prev_parity; /* if we get too close to singular k==0 point, just set k=0 to exploit our special handling of this k */ if (vector3_norm(kvector) < 1e-10) kvector.x = kvector.y = kvector.z = 0; mpi_one_printf("solve_kpoint (%g,%g,%g):\n", kvector.x, kvector.y, kvector.z); curfield_reset(); if (num_bands == 0) { mpi_one_printf(" num-bands is zero, not solving for any bands\n"); return; } if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called before solve-kpoint!\n"); return; } /* if this is the first k point, print out a header line for for the frequency grep data: */ if (!kpoint_index && mpi_is_master()) { printf("%sfreqs:, k index, k1, k2, k3, kmag/2pi", parity_string(mdata)); for (i = 0; i < num_bands; ++i) printf(", %s%sband %d", parity_string(mdata), mdata->parity == NO_PARITY ? "" : " ", i + 1); printf("\n"); } prev_parity = mdata->parity; cur_kvector = kvector; vector3_to_arr(k, kvector); update_maxwell_data_k(mdata, k, G[0], G[1], G[2]); CHECK(mdata->parity == prev_parity, "k vector is incompatible with specified parity"); CHK_MALLOC(eigvals, real, num_bands); flags = eigensolver_flags; /* ctl file input variable */ if (verbose) flags |= EIGS_VERBOSE; /* constant (zero frequency) bands at k=0 are handled specially, so remove them from the solutions for the eigensolver: */ if (mdata->zero_k && !mtdata) { int in, ip; ib0 = maxwell_zero_k_num_const_bands(H, mdata); for (in = 0; in < H.n; ++in) for (ip = 0; ip < H.p - ib0; ++ip) H.data[in * H.p + ip] = H.data[in * H.p + ip + ib0]; evectmatrix_resize(&H, H.p - ib0, 1); } else ib0 = 0; /* solve for all bands */ /* Set up deflation data: */ if (H.data != Hblock.data) { deflation.Y = H; deflation.p = 0; CHK_MALLOC(deflation.S, scalar, H.p * Hblock.p); CHK_MALLOC(deflation.S2, scalar, H.p * Hblock.p); } for (ib = ib0; ib < num_bands; ib += Hblock.alloc_p) { evectconstraint_chain *constraints; int num_iters; /* don't solve for too many bands if the block size doesn't divide the number of bands: */ if (ib + mdata->num_bands > num_bands) { maxwell_set_num_bands(mdata, num_bands - ib); for (i = 0; i < nwork_alloc; ++i) evectmatrix_resize(&W[i], num_bands - ib, 0); evectmatrix_resize(&Hblock, num_bands - ib, 0); } mpi_one_printf("Solving for bands %d to %d...\n", ib + 1, ib + Hblock.p); constraints = NULL; constraints = evect_add_constraint(constraints, maxwell_parity_constraint, (void *) mdata); if (mdata->zero_k) constraints = evect_add_constraint(constraints, maxwell_zero_k_constraint, (void *) mdata); if (Hblock.data != H.data) { /* initialize fields of block from H */ int in, ip; for (in = 0; in < Hblock.n; ++in) for (ip = 0; ip < Hblock.p; ++ip) Hblock.data[in * Hblock.p + ip] = H.data[in * H.p + ip + (ib-ib0)]; deflation.p = ib-ib0; if (deflation.p > 0) constraints = evect_add_constraint(constraints, deflation_constraint, &deflation); } if (mtdata) { /* solving for bands near a target frequency */ if (eigensolver_davidsonp) eigensolver_davidson( Hblock, eigvals + ib, maxwell_target_operator, (void *) mtdata, simple_preconditionerp ? maxwell_target_preconditioner : maxwell_target_preconditioner2, (void *) mtdata, evectconstraint_chain_func, (void *) constraints, W, nwork_alloc, tolerance, &num_iters, flags, 0.0); else eigensolver(Hblock, eigvals + ib, maxwell_target_operator, (void *) mtdata, simple_preconditionerp ? maxwell_target_preconditioner : maxwell_target_preconditioner2, (void *) mtdata, evectconstraint_chain_func, (void *) constraints, W, nwork_alloc, tolerance, &num_iters, flags); /* now, diagonalize the real Maxwell operator in the solution subspace to get the true eigenvalues and eigenvectors: */ CHECK(nwork_alloc >= 2, "not enough workspace"); eigensolver_get_eigenvals(Hblock, eigvals + ib, maxwell_operator,mdata, W[0],W[1]); } else { if (eigensolver_davidsonp) eigensolver_davidson( Hblock, eigvals + ib, maxwell_operator, (void *) mdata, simple_preconditionerp ? maxwell_preconditioner : maxwell_preconditioner2, (void *) mdata, evectconstraint_chain_func, (void *) constraints, W, nwork_alloc, tolerance, &num_iters, flags, 0.0); else eigensolver(Hblock, eigvals + ib, maxwell_operator, (void *) mdata, simple_preconditionerp ? maxwell_preconditioner : maxwell_preconditioner2, (void *) mdata, evectconstraint_chain_func, (void *) constraints, W, nwork_alloc, tolerance, &num_iters, flags); } if (Hblock.data != H.data) { /* save solutions of current block */ int in, ip; for (in = 0; in < Hblock.n; ++in) for (ip = 0; ip < Hblock.p; ++ip) H.data[in * H.p + ip + (ib-ib0)] = Hblock.data[in * Hblock.p + ip]; } evect_destroy_constraints(constraints); mpi_one_printf("Finished solving for bands %d to %d after " "%d iterations.\n", ib + 1, ib + Hblock.p, num_iters); total_iters += num_iters * Hblock.p; } if (num_bands - ib0 > Hblock.alloc_p) mpi_one_printf("Finished k-point with %g mean iterations/band.\n", total_iters * 1.0 / num_bands); /* Manually put in constant (zero-frequency) solutions for k=0: */ if (mdata->zero_k && !mtdata) { int in, ip; evectmatrix_resize(&H, H.alloc_p, 1); for (in = 0; in < H.n; ++in) for (ip = H.p - ib0 - 1; ip >= 0; --ip) H.data[in * H.p + ip + ib0] = H.data[in * H.p + ip]; maxwell_zero_k_set_const_bands(H, mdata); for (ib = 0; ib < ib0; ++ib) eigvals[ib] = 0; } /* Reset scratch matrix sizes: */ evectmatrix_resize(&Hblock, Hblock.alloc_p, 0); for (i = 0; i < nwork_alloc; ++i) evectmatrix_resize(&W[i], W[i].alloc_p, 0); maxwell_set_num_bands(mdata, Hblock.alloc_p); /* Destroy deflation data: */ if (H.data != Hblock.data) { free(deflation.S2); free(deflation.S); } if (num_write_output_vars > 1) { /* clean up from prev. call */ free(freqs.items); free(parity); } CHK_MALLOC(parity, char, strlen(parity_string(mdata)) + 1); parity = strcpy(parity, parity_string(mdata)); iterations = total_iters; /* iterations output variable */ /* create freqs array for storing frequencies in a Guile list */ freqs.num_items = num_bands; CHK_MALLOC(freqs.items, number, freqs.num_items); set_kpoint_index(kpoint_index + 1); mpi_one_printf("%sfreqs:, %d, %g, %g, %g, %g", parity, kpoint_index, (double)k[0], (double)k[1], (double)k[2], vector3_norm(matrix3x3_vector3_mult(Gm, kvector))); for (i = 0; i < num_bands; ++i) { freqs.items[i] = negative_epsilon_okp ? eigvals[i] : sqrt(eigvals[i]); mpi_one_printf(", %g", freqs.items[i]); } mpi_one_printf("\n"); eigensolver_flops = evectmatrix_flops; free(eigvals); } /**************************************************************************/ /* Return a list of the z/y parities, one for each band. */ number_list compute_zparities(void) { number_list z_parity; z_parity.num_items = num_bands; z_parity.items = maxwell_zparity(H, mdata); return z_parity; } number_list compute_yparities(void) { number_list y_parity; y_parity.num_items = num_bands; y_parity.items = maxwell_yparity(H, mdata); return y_parity; } /**************************************************************************/ /* Compute the group velocity dw/dk in the given direction d (where the length of d is ignored). d is in the reciprocal lattice basis. Should only be called after solve_kpoint. Returns a list of the group velocities, one for each band, in units of c. */ number_list compute_group_velocity_component(vector3 d) { number_list group_v; real *gv_scratch; real u[3]; int i, ib; group_v.num_items = 0; group_v.items = (number *) NULL; curfield_reset(); /* has the side effect of overwriting curfield scratch */ if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called first!\n"); return group_v; } if (!kpoint_index) { mpi_one_fprintf(stderr, "solve-kpoint must be called first!\n"); return group_v; } /* convert d to unit vector in Cartesian coords: */ d = unit_vector3(matrix3x3_vector3_mult(Gm, d)); u[0] = d.x; u[1] = d.y; u[2] = d.z; group_v.num_items = num_bands; CHK_MALLOC(group_v.items, number, group_v.num_items); CHK_MALLOC(gv_scratch, real, group_v.num_items * 2); /* now, compute group_v.items = diag Re : */ /* ...we have to do this in blocks of eigensolver_block_size since the work matrix W[0] may not have enough space to do it all at once. */ for (ib = 0; ib < num_bands; ib += Hblock.alloc_p) { if (ib + mdata->num_bands > num_bands) { maxwell_set_num_bands(mdata, num_bands - ib); evectmatrix_resize(&W[0], num_bands - ib, 0); evectmatrix_resize(&Hblock, num_bands - ib, 0); } if (Hblock.data != H.data) { /* initialize fields of block from H */ int in, ip; for (in = 0; in < Hblock.n; ++in) for (ip = 0; ip < Hblock.p; ++ip) Hblock.data[in * Hblock.p + ip] = H.data[in * H.p + ip + ib]; } maxwell_ucross_op(Hblock, W[0], mdata, u); evectmatrix_XtY_diag_real(Hblock, W[0], gv_scratch, gv_scratch + group_v.num_items); { int ip; for (ip = 0; ip < Hblock.p; ++ip) group_v.items[ib + ip] = gv_scratch[ip]; } } free(gv_scratch); /* Reset scratch matrix sizes: */ evectmatrix_resize(&Hblock, Hblock.alloc_p, 0); evectmatrix_resize(&W[0], W[0].alloc_p, 0); maxwell_set_num_bands(mdata, Hblock.alloc_p); /* The group velocity is given by: grad_k(omega)*d = grad_k(omega^2)*d / 2*omega = grad_k()*d / 2*omega = Re / omega Note that our k is in units of 2*Pi/a, and omega is in units of 2*Pi*c/a, so the result will be in units of c. */ for (i = 0; i < num_bands; ++i) { if (freqs.items[i] == 0) /* v is undefined in this case */ group_v.items[i] = 0.0; /* just set to zero */ else group_v.items[i] /= negative_epsilon_okp ? sqrt(fabs(freqs.items[i])) : freqs.items[i]; } return group_v; } /* as above, but only computes for given band */ number compute_1_group_velocity_component(vector3 d, integer b) { real u[3]; int ib = b - 1; real group_v, scratch; curfield_reset(); if (!mdata) { mpi_one_fprintf(stderr, "init-params must be called first!\n"); return group_v; } if (!kpoint_index) { mpi_one_fprintf(stderr, "solve-kpoint must be called first!\n"); return group_v; } /* convert d to unit vector in Cartesian coords: */ d = unit_vector3(matrix3x3_vector3_mult(Gm, d)); u[0] = d.x; u[1] = d.y; u[2] = d.z; evectmatrix_resize(&W[0], 1, 0); CHECK(nwork_alloc > 1, "eigensolver-nwork is too small"); evectmatrix_resize(&W[1], 1, 0); { /* initialize fields of block from H */ int in; scalar *data = W[1].data; for (in = 0; in < W[1].n; ++in) data[in] = H.data[in * H.p + ib]; } maxwell_ucross_op(W[1], W[0], mdata, u); evectmatrix_XtY_diag_real(W[1], W[0], &group_v, &scratch); /* Reset scratch matrix sizes: */ evectmatrix_resize(&W[1], W[1].alloc_p, 0); evectmatrix_resize(&W[0], W[0].alloc_p, 0); if (freqs.items[ib] == 0) /* v is undefined in this case */ group_v = 0.0; /* just set to zero */ else group_v /= negative_epsilon_okp ? sqrt(fabs(freqs.items[ib])) : freqs.items[ib]; return group_v; } /* returns group velocity for band b, in Cartesian coordinates */ vector3 compute_1_group_velocity(integer b) { vector3 v, d; matrix3x3 RmT = matrix3x3_transpose(Rm); d.x = 1; d.y = d.z = 0; v.x = compute_1_group_velocity_component(matrix3x3_vector3_mult(RmT,d),b); d.y = 1; d.x = d.z = 0; v.y = compute_1_group_velocity_component(matrix3x3_vector3_mult(RmT,d),b); d.z = 1; d.y = d.x = 0; v.z = compute_1_group_velocity_component(matrix3x3_vector3_mult(RmT,d),b); return v; } /* as above, but returns "group velocity" given by gradient of frequency with respect to k in reciprocal coords ... this is useful for band optimization. */ vector3 compute_1_group_velocity_reciprocal(integer b) { return matrix3x3_vector3_mult(matrix3x3_transpose(Gm), compute_1_group_velocity(b)); } /**************************************************************************/ mpb-1.5/mpb/material_grid_opt.c0000644000175400001440000002146412315341423013472 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ /* optimization routines for material grids */ #include #include #include #include "config.h" #include #include #include #include "mpb.h" #ifdef HAVE_NLOPT_H # include #endif /**************************************************************************/ /* optimization of band gaps as a function of the material grid */ typedef struct { boolean do_min; vector3_list ks; int b1, b2; int ngrids; material_grid *grids; int iter, unsolved; double *f1s, *f2s; /* arrays of length ks.num_items for freqs */ double *work; /* work array of length ntot */ } maxgap_func_data; /* the constraint is either an upper bound for band b1 or a lower bound for band b2 */ typedef enum { BAND1_CONSTRAINT = 0, BAND2_CONSTRAINT = 1 } band_constraint_kind; typedef struct { maxgap_func_data *d; int ik; /* index of k point for this constraint (in d->ks) */ band_constraint_kind kind; } band_constraint_data; static double band_constraint(int n, const double *u, double *grad, void *data) { band_constraint_data *cdata = (band_constraint_data *) data; maxgap_func_data *d = cdata->d; int ik = cdata->ik; int kind = cdata->kind; double *work = d->work; double val = 0; /* Strictly speaking, we should call material_grids_set here. However we rely on an implementation detail of our MMA code: it always evaluates the objective function before evaluating the constraints, and hence we can set the material_grids once in the objective. */ /* We will typically have more than one band per k-point (typically 2 bands), and we don't need to call solve_kpoint more than once per band. Here we exploit the fact that our MMA code always calls all the constraints at once (in sequence); it never changes u in between one constraint & the next. */ if (!vector3_equal(cur_kvector, d->ks.items[ik]) || d->unsolved) { randomize_fields(); solve_kpoint(d->ks.items[ik]); } d->unsolved = 0; if (grad) memset(work, 0, sizeof(double) * (n-2)); if (kind == BAND1_CONSTRAINT) { if (grad) { material_grids_addgradient(work, 1.0, d->b1, d->grids, d->ngrids); grad[n-1] = -1; grad[n-2] = 0; } val = (d->f1s[ik] = freqs.items[d->b1-1]) - u[n-1]; } else { if (grad) { material_grids_addgradient(work, -1.0, d->b2, d->grids, d->ngrids); grad[n-1] = 0; grad[n-2] = 1; } val = u[n-2] - (d->f2s[ik] = freqs.items[d->b2-1]); } if (grad) /* gradient w.r.t. epsilon needs to be summed over processes */ mpi_allreduce(work, grad, n-2, double, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); return val; } static double maxgap_func(int n, const double *u, double *grad, void *data) { maxgap_func_data *d = (maxgap_func_data *) data; double gap, f1 = u[n-1], f2 = u[n-2]; /* set the material grids, for use in the constraint functions and also for outputting in verbose mode */ material_grids_set(u, d->grids, d->ngrids); reset_epsilon(); d->iter++; d->unsolved = 1; gap = (f2 - f1) * 2.0 / (f1 + f2); if (grad) { memset(grad, 0, sizeof(double) * (n-2)); grad[n-1] = 2.0 * ((f1 + f2) - (f1 - f2)) / ((f1+f2)*(f1+f2)); grad[n-2] = 2.0 * (-(f1 + f2) - (f1 - f2)) / ((f1+f2)*(f1+f2)); if (d->do_min) { grad[n-1] = -grad[n-1]; grad[n-2] = -grad[n-2]; } } mpi_one_printf("material-grid-%sgap:, %d, %g, %g, %0.15g\n", d->do_min ? "min" : "max", d->iter, f1, f2, gap); if (verbose) { char prefix[256]; get_epsilon(); snprintf(prefix, 256, "%sgap-%04d-", d->do_min ? "min" : "max", d->iter); output_field_to_file(-1, prefix); } return d->do_min ? gap : -gap; } static number material_grids_maxmin_gap(boolean do_min, vector3_list kpoints, integer band1, integer band2, number func_tol, number eps_tol, integer maxeval, number maxtime) { maxgap_func_data d; int i, n; double *u, *lb, *ub, *u_tol, func_min; band_constraint_data *cdata; int have_uprod; CHECK(band1>0 && band1 <= num_bands && band2>0 && band2 <= num_bands, "invalid band numbers in material-grid-maxgap"); d.ks = kpoints; d.b1 = band1; d.b2 = band2; d.grids = get_material_grids(geometry, &d.ngrids); d.iter = 0; d.unsolved = 1; d.do_min = do_min; d.f1s = (double *) malloc(sizeof(double) * kpoints.num_items*2); d.f2s = d.f1s + kpoints.num_items; n = material_grids_ntot(d.grids, d.ngrids) + 2; u = (double *) malloc(sizeof(double) * n * 5); lb = u + n; ub = lb + n; u_tol = ub + n; d.work = u_tol + n; material_grids_get(u, d.grids, d.ngrids); u[n-1] = 0; /* band1 max */ u[n-2] = HUGE_VAL; /* band2 min */ cdata = (band_constraint_data*) malloc(sizeof(band_constraint_data) * kpoints.num_items*2); for (i = 0; i < kpoints.num_items; ++i) { band_constraint_kind kind; for (kind = BAND1_CONSTRAINT; kind <= BAND2_CONSTRAINT; ++kind) { cdata[2*i + kind].d = &d; cdata[2*i + kind].ik = i; cdata[2*i + kind].kind = kind; /* compute initial band min/max */ band_constraint(n, u, NULL, &cdata[2*i + kind]); if (kind == BAND1_CONSTRAINT && d.f1s[i] > u[n-1]) u[n-1] = d.f1s[i]; else if (kind == BAND2_CONSTRAINT && d.f2s[i] < u[n-2]) u[n-2] = d.f2s[i]; } } u[n-1] *= 1.001; u[n-2] /= 1.001; /* ensure feasibility of initial u */ for (i = 0; i < d.ngrids && d.grids[i].material_grid_kind != U_PROD; ++i); have_uprod = i < d.ngrids; for (i = 0; i < n-2; ++i) { ub[i] = 1; u_tol[i] = eps_tol; /* bound u slightly about 0 for uprod grids, as when u=0 the gradient is problematic (especially for multiple u's = 0 */ lb[i] = have_uprod ? 1e-4 : 0; if (u[i] < lb[i]) u[i] = lb[i]; } u_tol[n-1] = u_tol[n-2] = 0; lb[n-1] = lb[n-2] = 0; ub[n-1] = ub[n-2] = HUGE_VAL; #if defined(HAVE_NLOPT_H) && defined(HAVE_NLOPT) { nlopt_result res; extern int mma_verbose; mma_verbose = kpoints.num_items*2; res = nlopt_minimize_constrained( NLOPT_LD_MMA, n, maxgap_func, &d, kpoints.num_items*2, band_constraint, cdata, sizeof(band_constraint_data), lb, ub, u, &func_min, -HUGE_VAL, func_tol,0, 0,u_tol, maxeval,maxtime); CHECK(res > 0, "failure of nlopt_minimize"); } #else CHECK(0, "nlopt library is required for material-grid-maxgap"); #endif maxgap_func(n, u, NULL, &d); /* recompute bands and get actual gap size */ u[n-1] = 0; /* band1 max */ u[n-2] = HUGE_VAL; /* band2 min */ for (i = 0; i < kpoints.num_items; ++i) { band_constraint_kind kind; for (kind = BAND1_CONSTRAINT; kind <= BAND2_CONSTRAINT; ++kind) { band_constraint(n, u, NULL, &cdata[2*i + kind]); if (kind == BAND1_CONSTRAINT && d.f1s[i] > u[n-1]) u[n-1] = d.f1s[i]; else if (kind == BAND2_CONSTRAINT && d.f2s[i] < u[n-2]) u[n-2] = d.f2s[i]; } } func_min = (u[n-2] - u[n-1]) * 2.0 / (u[n-1] + u[n-2]); mpi_one_printf("material-grid-%sgap:, %d, %g, %g, %0.15g\n", d.do_min ? "min" : "max", d.iter+1, u[n-1], u[n-2], func_min); func_min = d.do_min ? func_min : -func_min; free(cdata); free(u); free(d.grids); free(d.f1s); return(do_min ? func_min : -func_min); } number material_grids_maxgap(vector3_list kpoints, integer band1, integer band2, number func_tol, number eps_tol, integer maxeval, number maxtime) { return material_grids_maxmin_gap(0, kpoints, band1, band2, func_tol, eps_tol, maxeval, maxtime); } number material_grids_mingap(vector3_list kpoints, integer band1, integer band2, number func_tol, number eps_tol, integer maxeval, number maxtime) { return material_grids_maxmin_gap(1, kpoints, band1, band2, func_tol, eps_tol, maxeval, maxtime); } /**************************************************************************/ mpb-1.5/mpb/mpb-split-preinstall.in0000755000175400001440000000204212315326162014250 00000000000000#! @SH_JOB@ if test x"`echo $1 | egrep '^[0-9]*$'`" = x; then echo "Syntax: $0 [mpb arguments...]" 1>&2 exit 1 fi tmpname=/tmp/mpb-split.$$.tmp # unique temporary filename subprocesses="" # keep a list of the subprocess ids launched # If a SIGINT or SIGHUP is received, kill subprocesses and delete temp. files: trap 'echo "killing subprocesses: $subprocesses"; kill -9 $subprocesses; rm -f $tmpname.*; exit 1' 1 2 # Run num-split instances of mpb, each with a chunk of k-points, with # the first chunk going to stdout and the rest going to temporary files # to be output later. ./mpb interactive?=false k-split-index=0 k-split-num=$* & subprocesses="$subprocesses $!" i=0 while test `expr $i \< $1` = 1; do ./mpb interactive?=false k-split-index=$i k-split-num=$* > $tmpname.$i & subprocesses="$subprocesses $!" i=`expr $i + 1` done # After all mpb processes have finished, concatenate their outputs in order. wait i=0 while test `expr $i \< $1` = 1; do cat $tmpname.$i rm -f $tmpname.$i i=`expr $i + 1` done mpb-1.5/mpb/my-smob.h0000644000175400001440000000464212315341423011374 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #ifndef SMOB_H #define SMOB_H 1 /* use new smob functions from Guile 1.4+ */ #include #ifndef HAVE_SCM_MAKE_SMOB_TYPE /* Thanks to Greg Badros for posting a Guile smob tutorial; see http://sources.redhat.com/ml/guile/1999-04/msg00107.html However, this way of creating smobs no longer works as of Guile 1.4. */ #define REGISTER_SMOBFUNS(T) \ do { scm_tc16_smob_ ## T = scm_newsmob(& T ## _smobfuns); } while (0) #define MAKE_SMOBFUNS(T) \ static scm_smobfuns T ## _smobfuns = { \ &mark_ ## T, \ &free_ ## T, \ &print_ ## T, 0 } #endif /* ! HAVE_SCM_MAKE_SMOB_TYPE */ #ifdef HAVE_SCM_NEWSMOB # define NEWCELL_SMOB(ANSWER,T,PSMOB) \ SCM_NEWSMOB(ANSWER, scm_tc16_smob_ ## T, PSMOB) #else # define NEWCELL_SMOB(ANSWER,T,PSMOB) do { \ SCM_NEWCELL((ANSWER)); \ SCM_SETCAR((ANSWER),scm_tc16_smob_ ## T); \ SCM_SETCDR((ANSWER),(SCM) (PSMOB)); \ } while (0) #endif /* T_SMOB_P(T, X) is true iff X is an instance of the T SMOB type */ #ifdef HAVE_SCM_SMOB_PREDICATE # define T_SMOB_P(T, X) SCM_SMOB_PREDICATE(scm_tc16_smob_ ## T, X) #else # define T_SMOB_P(T, X) (SCM_NIMP (X) \ && SCM_TYP16 (X) == (scm_tc16_smob_ ## T)) #endif /* T_SMOB(T, X) returns the T * with the guts of the X instance; it assumes X is a T SMOB instance, and could crash if it is not */ #ifdef HAVE_SCM_SMOB_DATA # define T_SMOB(T, X) ((T *) SCM_SMOB_DATA(X)) #else # define T_SMOB(T, X) ((T *)SCM2PTR(SCM_CDR(X))) #endif /* Since T_SMOB(X) can be dangerous if X is not a T object, we also have a SAFE_T_SMOB macro: */ #define SAFE_T_SMOB(T, X) (T_SMOB_P(T,X) ? T_SMOB(T,X) : NULL) #endif /* SMOB_H */ mpb-1.5/mpb/material_grid.c0000644000175400001440000010657212315341423012614 00000000000000/* Copyright (C) 1999-2014 Massachusetts Institute of Technology. * * 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 */ #include #include #include #include "config.h" #include #include #include #include #include "mpb.h" #ifdef HAVE_SCM_IS_ARRAY # undef SCM_ARRAYP # define SCM_ARRAYP scm_is_array #endif /**************************************************************************/ /* For Guile 1.6, to access this with reasonable efficiency requires some ugly code from the guts of libguile/unif.c. In Guile 1.8, they provided a documented way (scm_array_get_handle) to do this, but in this case you are also required to call scm_array_handle_release, via material_grid_array_release. In our code, you can only have one material_grid array pointer at a time. */ #ifdef HAVE_SCM_ARRAY_GET_HANDLE static scm_t_array_handle cur_material_grid_array_handle; #endif static double *material_grid_array(const material_grid *g) { #ifdef HAVE_SCM_ARRAY_GET_HANDLE scm_array_get_handle(g->matgrid, &cur_material_grid_array_handle); return (double *) scm_array_handle_uniform_writable_elements( &cur_material_grid_array_handle); #else CHECK(SCM_ARRAYP(g->matgrid), "bug: matgrid is not an array"); return (double *) SCM_CELL_WORD_1(SCM_ARRAY_V(g->matgrid)); #endif } static void material_grid_array_release(const material_grid *g) { #ifdef HAVE_SCM_ARRAY_GET_HANDLE (void) g; scm_array_handle_release(&cur_material_grid_array_handle); #else (void) g; #endif } /* Get the interpolated value at p from the material grid g. p.x/p.y/p.z must be in (-1,2). This involves a bit more Guile internals than I would like, ripped out of scm_uniform_vector_ref in libguile/unif.c, but the alternative is a lot of overhead given that we know for certain that the material grid is a uniform 3d array of g->size double-precision values. */ real material_grid_val(vector3 p, const material_grid *g) { real val; CHECK(SCM_ARRAYP(g->matgrid), "bug: matgrid is not an array"); val = linear_interpolate(p.x, p.y, p.z, material_grid_array(g), g->size.x, g->size.y, g->size.z, 1); material_grid_array_release(g); return val; } /* Returns true if m is a material grid and has the same epsilon min/max as mg, and the same kind, so that they are merged when they overlap */ static int compatible_matgrids(const material_grid *mg, const material_type *m) { return (m->which_subclass == MATERIAL_GRID && m->subclass.material_grid_data->material_grid_kind == mg->material_grid_kind && m->subclass.material_grid_data->epsilon_min == mg->epsilon_min && m->subclass.material_grid_data->epsilon_max == mg->epsilon_max); } static int matgrid_val_count = 0; /* cache for gradient calculation */ double matgrid_val(vector3 p, geom_box_tree tp, int oi, const material_grid *mg) { double uprod = 1.0, umin = 1.0, usum = 0.0, u; matgrid_val_count = 0; CHECK(sizeof(real) == sizeof(double), "material grids require double precision"); if (tp) { do { u = material_grid_val( to_geom_box_coords(p, &tp->objects[oi]), tp->objects[oi].o->material .subclass.material_grid_data); if (u < umin) umin = u; uprod *= u; usum += u; ++matgrid_val_count; tp = geom_tree_search_next(p, tp, &oi); } while (tp && compatible_matgrids(mg, &tp->objects[oi].o->material)); } if (!tp && compatible_matgrids(mg, &default_material)) { p.x = no_size_x ? 0 : p.x / geometry_lattice.size.x; p.y = no_size_y ? 0 : p.y / geometry_lattice.size.y; p.z = no_size_z ? 0 : p.z / geometry_lattice.size.z; u = material_grid_val(p, default_material.subclass.material_grid_data); if (u < umin) umin = u; uprod *= u; usum += u; ++matgrid_val_count; } return (mg->material_grid_kind == U_MIN ? umin : (mg->material_grid_kind == U_PROD ? uprod : usum / matgrid_val_count)); } /**************************************************************************/ material_grid *get_material_grids(geometric_object_list g, int *ngrids) { int i, nalloc = 0; material_grid *grids = 0; *ngrids = 0; for (i = 0; i < g.num_items; ++i) if (g.items[i].material.which_subclass == MATERIAL_GRID) { int j; for (j = 0; j < *ngrids; ++j) if (material_grid_equal(&grids[j], g.items[i].material.subclass .material_grid_data)) break; if (j < *ngrids) continue; if (j >= nalloc) { nalloc = nalloc * 2 + 1; grids = realloc(grids, sizeof(material_grid) * nalloc); } grids[j] = *g.items[i].material.subclass.material_grid_data; ++*ngrids; } if (default_material.which_subclass == MATERIAL_GRID) { int j; for (j = 0; j < *ngrids; ++j) if (material_grid_equal(&grids[j], default_material.subclass .material_grid_data)) break; if (j == *ngrids) { if (j >= nalloc) { nalloc = nalloc * 2 + 1; grids = realloc(grids, sizeof(material_grid) * nalloc); } grids[j] = *default_material.subclass.material_grid_data; ++*ngrids; } } return grids; } int material_grids_ntot(const material_grid *grids, int ngrids) { int i, ntot = 0; for (i = 0; i < ngrids; ++i) ntot += grids[i].size.x * grids[i].size.y * grids[i].size.z; return ntot; } /* note that you also need to call reset_epsilon() if you actually want to change the dielectric function */ void material_grids_set(const double *u, material_grid *grids, int ngrids) { int i, j = 0; CHECK(sizeof(real) == sizeof(double), "material grids require double precision"); for (i = 0; i < ngrids; ++i) { int ntot = grids[i].size.x * grids[i].size.y * grids[i].size.z; double *a = material_grid_array(&grids[i]); int k; for (k = 0; k < ntot; ++k) a[k] = u[j + k]; material_grid_array_release(&grids[i]); j += ntot; } } void material_grids_get(double *u, const material_grid *grids, int ngrids) { int i, j = 0; CHECK(sizeof(real) == sizeof(double), "material grids require double precision"); for (i = 0; i < ngrids; ++i) { int ntot = grids[i].size.x * grids[i].size.y * grids[i].size.z; double *a = material_grid_array(&grids[i]); int k; for (k = 0; k < ntot; ++k) u[j + k] = a[k]; material_grid_array_release(&grids[i]); j += ntot; } } /**************************************************************************/ /* The addgradient function adds to v the gradient, scaled by scalegrad, of the frequency of the given band, with respect to changes in the material grid values. This requires that solve_kpoint has already been called to solve for the fields (with enough bands). (Note that the band index starts at 1!!) By perturbation theory, the change in frequency for a small change deps in epsilon is (-omega/2) times the integral of deps |E|^2, where E is normalized so that integral eps |E|^2 = 1 (the default normalization in MPB). Thus for a particular "pixel" in the material grid with value u, that component of the gradient is: |E|^2 * dV * (eps_max-eps_min) * interpolation_weight where |E|^2 is the field at that point, dV is the volume of the |E|^2 voxel, and interpolation_weight is the weight of that grid pixel that contributes to the |E|^2 voxel in the linear interpolation. For U_MIN: Where multiple grids overlap, only those grids that contribute the minimum u contribute, and for other grids the gradient is zero. This unfortunately makes the gradient only piecewise continuous. For U_PROD: The gradient is multiplied by the product of u's from overlapping grids, divided by the u from the current grid. This unfortunately makes the gradient zero when two or more u's are zero, stalling convergence, although we try to avoid this by making the minimum u = 1e-4 instead of 0. For U_SUM: The gradient is divided by the number of overlapping grids. This doesn't have the property that u=0 in one grid makes the total u=0, unfortunately, which is desirable if u=0 indicates "drilled holes". */ /* add the weights from linear_interpolate (see the linear_interpolate function in epsilon_file.c) to data ... this has to be changed if linear_interpolate is changed!! ...also multiply by scaleby etc. for different gradient types */ static void add_interpolate_weights(real rx, real ry, real rz, real *data, int nx, int ny, int nz, int stride, double scaleby, const real *udata, int ukind, double uval) { int x, y, z, x2, y2, z2; real dx, dy, dz, u; /* mirror boundary conditions for r just beyond the boundary */ if (rx < 0.0) rx = -rx; else if (rx > 1.0) rx = 1.0 - rx; if (ry < 0.0) ry = -ry; else if (ry > 1.0) ry = 1.0 - ry; if (rz < 0.0) rz = -rz; else if (rz > 1.0) rz = 1.0 - rz; /* get the point corresponding to r in the epsilon array grid: */ x = rx * nx; if (x == nx) --x; y = ry * ny; if (y == ny) --y; z = rz * nz; if (z == nz) --z; /* get the difference between (x,y,z) and the actual point ... we shift by 0.5 to center the data points in the pixels */ dx = rx * nx - x - 0.5; dy = ry * ny - y - 0.5; dz = rz * nz - z - 0.5; /* get the other closest point in the grid, with mirror boundaries: */ x2 = (dx >= 0.0 ? x + 1 : x - 1); if (x2 < 0) x2++; else if (x2 == nx) x2--; y2 = (dy >= 0.0 ? y + 1 : y - 1); if (y2 < 0) y2++; else if (y2 == ny) y2--; z2 = (dz >= 0.0 ? z + 1 : z - 1); if (z2 < 0) z2++; else if (z2 == nz) z2--; /* take abs(d{xyz}) to get weights for {xyz} and {xyz}2: */ dx = fabs(dx); dy = fabs(dy); dz = fabs(dz); /* define a macro to give us data(x,y,z) on the grid, in row-major order (the order used by HDF5): */ #define D(x,y,z) (data[(((x)*ny + (y))*nz + (z)) * stride]) #define U(x,y,z) (udata[(((x)*ny + (y))*nz + (z)) * stride]) u = (((U(x,y,z)*(1.0-dx) + U(x2,y,z)*dx) * (1.0-dy) + (U(x,y2,z)*(1.0-dx) + U(x2,y2,z)*dx) * dy) * (1.0-dz) + ((U(x,y,z2)*(1.0-dx) + U(x2,y,z2)*dx) * (1.0-dy) + (U(x,y2,z2)*(1.0-dx) + U(x2,y2,z2)*dx) * dy) * dz); if (ukind == U_MIN && u != uval) return; if (ukind == U_PROD) scaleby *= uval / u; D(x,y,z) += (1.0-dx) * (1.0-dy) * (1.0-dz) * scaleby; D(x2,y,z) += dx * (1.0-dy) * (1.0-dz) * scaleby; D(x,y2,z) += (1.0-dx) * dy * (1.0-dz) * scaleby; D(x2,y2,z) += dx * dy * (1.0-dz) * scaleby; D(x,y,z2) += (1.0-dx) * (1.0-dy) * dz * scaleby; D(x2,y,z2) += dx * (1.0-dy) * dz * scaleby; D(x,y2,z2) += (1.0-dx) * dy * dz * scaleby; D(x2,y2,z2) += dx * dy * dz * scaleby; #undef D } static void material_grids_addgradient_point(double *v, vector3 p, double scalegrad, const material_grid *grids, int ngrids) { geom_box_tree tp; int oi, i; material_grid *mg; double uval; int kind; tp = geom_tree_search(p, geometry_tree, &oi); if (tp && tp->objects[oi].o->material.which_subclass == MATERIAL_GRID) mg = tp->objects[oi].o->material.subclass.material_grid_data; else if (!tp && default_material.which_subclass == MATERIAL_GRID) mg = default_material.subclass.material_grid_data; else return; /* no material grids at this point */ uval = matgrid_val(p, tp, oi, mg); scalegrad *= (mg->epsilon_max - mg->epsilon_min); if ((kind = mg->material_grid_kind) == U_SUM) scalegrad /= matgrid_val_count; if (tp) { do { vector3 pb = to_geom_box_coords(p, &tp->objects[oi]); vector3 sz = tp->objects[oi].o->material .subclass.material_grid_data->size; double *vcur = v, *ucur; for (i = 0; i < ngrids; ++i) { if (material_grid_equal(grids+i, tp->objects[oi].o->material .subclass.material_grid_data)) break; else vcur += (int) (grids[i].size.x * grids[i].size.y * grids[i].size.z); } CHECK(i < ngrids, "bug in material_grid_gradient_point"); ucur = material_grid_array(grids+i); add_interpolate_weights(pb.x, pb.y, pb.z, vcur, sz.x, sz.y, sz.z, 1, scalegrad, ucur, kind, uval); material_grid_array_release(grids+i); tp = geom_tree_search_next(p, tp, &oi); } while (tp && compatible_matgrids(mg, &tp->objects[oi].o->material)); } if (!tp && compatible_matgrids(mg, &default_material)) { vector3 pb; vector3 sz = default_material.subclass.material_grid_data->size; double *vcur = v, *ucur; for (i = 0; i < ngrids; ++i) { if (material_grid_equal(grids+i, default_material .subclass.material_grid_data)) break; else vcur += (int) (grids[i].size.x * grids[i].size.y * grids[i].size.z); } CHECK(i < ngrids, "bug in material_grid_gradient_point"); pb.x = no_size_x ? 0 : p.x / geometry_lattice.size.x; pb.y = no_size_y ? 0 : p.y / geometry_lattice.size.y; pb.z = no_size_z ? 0 : p.z / geometry_lattice.size.z; ucur = material_grid_array(grids+i); add_interpolate_weights(pb.x, pb.y, pb.z, vcur, sz.x, sz.y, sz.z, 1, scalegrad, ucur, kind, uval); material_grid_array_release(grids+i); } } void material_grids_addgradient(double *v, double scalegrad, int band, const material_grid *grids, int ngrids) { int i, j, k, n1, n2, n3, n_other, n_last, rank, last_dim; #ifdef HAVE_MPI int local_n2, local_y_start, local_n3; #endif real s1, s2, s3, c1, c2, c3; real *Esqr; CHECK(band <= num_bands, "addgradient called for uncomputed band"); if (band) { scalegrad *= -freqs.items[band - 1]/2; get_efield(band); } compute_field_squared(); Esqr = (real *) curfield; scalegrad *= Vol / H.N; n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; n_other = mdata->other_dims; n_last = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); last_dim = mdata->last_dim; rank = (n3 == 1) ? (n2 == 1 ? 1 : 2) : 3; s1 = geometry_lattice.size.x / n1; s2 = geometry_lattice.size.y / n2; s3 = geometry_lattice.size.z / n3; c1 = n1 <= 1 ? 0 : geometry_lattice.size.x * 0.5; c2 = n2 <= 1 ? 0 : geometry_lattice.size.y * 0.5; c3 = n3 <= 1 ? 0 : geometry_lattice.size.z * 0.5; /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and "index" describing the corresponding index in the curfield array. This was all stolen from fields.c...it would be better if we didn't have to cut and paste, sigh. */ #ifdef SCALAR_COMPLEX # ifndef HAVE_MPI for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j, k2 = k; int index = ((i * n2 + j) * n3 + k); # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j + local_y_start, k2 = k; int index = ((j * n1 + i) * n3 + k); # endif /* HAVE_MPI */ #else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI for (i = 0; i < n_other; ++i) for (j = 0; j < n_last; ++j) { int index = i * n_last + j; int i2, j2, k2; switch (rank) { case 2: i2 = i; j2 = j; k2 = 0; break; case 3: i2 = i / n2; j2 = i % n2; k2 = j; break; default: i2 = j; j2 = k2 = 0; break; } # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* For a real->complex transform, the last dimension is cut in half. For a 2d transform, this is taken into account in local_ny already, but for a 3d transform we must compute the new n3: */ if (n3 > 1) local_n3 = mdata->last_dim_size / 2; else local_n3 = 1; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < local_n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int index = ((j * n1 + i) * local_n3 + k); # endif /* HAVE_MPI */ #endif /* not SCALAR_COMPLEX */ { vector3 p; p.x = i2 * s1 - c1; p.y = j2 * s2 - c2; p.z = k2 * s3 - c3; material_grids_addgradient_point( v, p, Esqr[index]*scalegrad, grids,ngrids); #ifndef SCALAR_COMPLEX { int last_index; # ifdef HAVE_MPI if (n3 == 1) last_index = j + local_y_start; else last_index = k; # else last_index = j; # endif if (last_index != 0 && 2*last_index != last_dim) { int i2c, j2c, k2c; i2c = i2 ? (n1 - i2) : 0; j2c = j2 ? (n2 - j2) : 0; k2c = k2 ? (n3 - k2) : 0; p.x = i2c * s1 - c1; p.y = j2c * s2 - c2; p.z = k2c * s3 - c3; material_grids_addgradient_point( v, p, Esqr[index]*scalegrad, grids,ngrids); } } #endif /* !SCALAR_COMPLEX */ } } } /**************************************************************************/ /* some routines mainly for debugging */ void print_material_grids_gradient(integer band) { int ngrids; material_grid *grids = get_material_grids(geometry, &ngrids); int i, ntot = material_grids_ntot(grids, ngrids); double *grad = (double *) malloc(sizeof(double) * ntot); for (i = 0; i < ntot; ++i) grad[i] = 0; material_grids_addgradient(grad, 1.0, band, grids, ngrids); for (i = 0; i < ntot; ++i) mpi_one_printf(", %g", grad[i]); free(grad); free(grids); } number material_grids_approx_gradient(vector3 kpoint, integer band, integer iu, number du) { int ngrids; material_grid *grids = get_material_grids(geometry, &ngrids); int i, ntot = material_grids_ntot(grids, ngrids); double *u = (double *) malloc(sizeof(double) * ntot); double f0, f1, dfdu; solve_kpoint(kpoint); f0 = freqs.items[band-1]; for (i = 0; i < ntot; ++i) u[i] = 0; material_grids_addgradient(u, 1.0, band, grids, ngrids); dfdu = u[iu]; material_grids_get(u, grids, ngrids); u[iu] += du; material_grids_set(u, grids, ngrids); reset_epsilon(); solve_kpoint(kpoint); f1 = freqs.items[band-1]; u[iu] -= du; material_grids_set(u, grids, ngrids); reset_epsilon(); mpi_one_printf("approxgrad: ntot=%d, u[%d] = %g -> f_%d = %g, u += %g -> f_%d = %g; df/du = %g vs. analytic %g\n", ntot, iu, u[iu], band, f0, du, band, f1, (f1-f0)/du, dfdu); free(u); free(grids); return (f1 - f0) / du; } void print_material_grids_deps_du(void) { int i, j, k, n1, n2, n3; real s1, s2, s3, c1, c2, c3; int ngrids; material_grid *grids = get_material_grids(geometry, &ngrids); int ntot = material_grids_ntot(grids, ngrids); double *v = (double *) malloc(sizeof(double) * ntot); n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; s1 = geometry_lattice.size.x / n1; s2 = geometry_lattice.size.y / n2; s3 = geometry_lattice.size.z / n3; c1 = n1 <= 1 ? 0 : geometry_lattice.size.x * 0.5; c2 = n2 <= 1 ? 0 : geometry_lattice.size.y * 0.5; c3 = n3 <= 1 ? 0 : geometry_lattice.size.z * 0.5; /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and "index" describing the corresponding index in the curfield array. This was all stolen from fields.c...it would be better if we didn't have to cut and paste, sigh. */ for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int index = ((i * n2 + j) * n3 + k); { vector3 p; geom_box_tree tp; int oi, ig; material_grid *mg; double uval; int kind; double scalegrad; memset(v, 0, sizeof(double) * ntot); p.x = i * s1 - c1; p.y = j * s2 - c2; p.z = k * s3 - c3; tp = geom_tree_search(p, geometry_tree, &oi); if (tp && tp->objects[oi].o->material.which_subclass == MATERIAL_GRID) mg = tp->objects[oi].o->material.subclass.material_grid_data; else if (!tp && default_material.which_subclass == MATERIAL_GRID) mg = default_material.subclass.material_grid_data; else goto gotmyv; /* no material grids at this point */ uval = matgrid_val(p, tp, oi, mg); scalegrad = (mg->epsilon_max - mg->epsilon_min); if ((kind = mg->material_grid_kind) == U_SUM) scalegrad /= matgrid_val_count; if (tp) { do { vector3 pb = to_geom_box_coords(p, &tp->objects[oi]); vector3 sz = tp->objects[oi].o->material .subclass.material_grid_data->size; double *vcur = v, *ucur; for (ig = 0; ig < ngrids; ++ig) { if (material_grid_equal(grids+ig, tp->objects[oi].o->material .subclass.material_grid_data)) break; else vcur += (int) (grids[ig].size.x * grids[ig].size.y * grids[ig].size.z); } CHECK(ig < ngrids, "bug in material_grid_gradient_point"); ucur = material_grid_array(grids+ig); add_interpolate_weights(pb.x, pb.y, pb.z, vcur, sz.x, sz.y, sz.z, 1, scalegrad, ucur, kind, uval); material_grid_array_release(grids+ig); tp = geom_tree_search_next(p, tp, &oi); } while (tp && compatible_matgrids(mg, &tp->objects[oi].o->material)); } if (!tp && compatible_matgrids(mg, &default_material)) { vector3 pb; vector3 sz = default_material.subclass.material_grid_data->size; double *vcur = v, *ucur; for (ig = 0; ig < ngrids; ++ig) { if (material_grid_equal(grids+ig, default_material .subclass.material_grid_data)) break; else vcur += (int) (grids[ig].size.x * grids[ig].size.y * grids[ig].size.z); } CHECK(ig < ngrids, "bug in material_grid_gradient_point"); pb.x = no_size_x ? 0 : p.x / geometry_lattice.size.x; pb.y = no_size_y ? 0 : p.y / geometry_lattice.size.y; pb.z = no_size_z ? 0 : p.z / geometry_lattice.size.z; ucur = material_grid_array(grids+ig); add_interpolate_weights(pb.x, pb.y, pb.z, vcur, sz.x, sz.y, sz.z, 1, scalegrad, ucur, kind, uval); material_grid_array_release(grids+ig); } gotmyv: mpi_one_printf("depsdu:, %g, %d", mean_epsilon_from_matrix(mdata->eps_inv + index), index); for (ig = 0; ig < ntot; ++ig) mpi_one_printf(", %g", v[ig]); mpi_one_printf("\n"); } } free(v); } void print_material_grids_deps_du_numeric(double du) { int i, j, k; int n1 = mdata->nx, n2 = mdata->ny, n3 = mdata->nz; int ngrids; material_grid *grids = get_material_grids(geometry, &ngrids); int ntot = material_grids_ntot(grids, ngrids); double *u = (double *) malloc(sizeof(double) * ntot); double *v = (double *) malloc(sizeof(double) * (n1*n2*n3) * ntot); double *ep = (double *) malloc(sizeof(double) * (n1*n2*n3)); double *foo; int iu; material_grids_get(u, grids, ngrids); reset_epsilon(); ep[0] = 1.234; for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int index = ((i * n2 + j) * n3 + k); ep[index] = mean_epsilon_from_matrix(mdata->eps_inv + index); } for (iu = 0; iu < ntot; ++iu) { u[iu] += du; material_grids_set(u, grids, ngrids); reset_epsilon(); for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int index = ((i * n2 + j) * n3 + k); double epn = mean_epsilon_from_matrix(mdata->eps_inv + index); v[index*ntot + iu] = (epn - ep[index]) / du; } u[iu] -= du; } for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int index = ((i * n2 + j) * n3 + k); mpi_one_printf("depsduN:, %g, %d", ep[index], index); for (iu = 0; iu < ntot; ++iu) mpi_one_printf(", %g", v[index*ntot + iu]); mpi_one_printf("\n"); } material_grids_set(u, grids, ngrids); reset_epsilon(); free(ep); free(v); free(u); } /**************************************************************************/ static void synchronize_material_grid(material_grid *g) { double *grid; int n = ((int) g->size.x) * ((int) g->size.y) * ((int) g->size.z); grid = material_grid_array(g); MPI_Bcast(grid, n, MPI_DOUBLE, 0, MPI_COMM_WORLD); material_grid_array_release(g); } void randomize_material_gridB(material_grid g, number noise) { if (mpi_is_master()) { double *grid; int i, n = ((int) g.size.x) * ((int) g.size.y) * ((int) g.size.z); grid = material_grid_array(&g); for (i = 0; i < n; ++i) { double u = grid[i] + noise * (-1 + rand() * 2.0/RAND_MAX); while (u < 0 || u > 1) { /* mirror boundary conditions */ if (u > 1) u = 1 - u; if (u < 0) u = -u; } grid[i] = u; } material_grid_array_release(&g); } synchronize_material_grid(&g); } /**************************************************************************/ void save_material_grid(material_grid g, string filename) { if (mpi_is_master()) { matrixio_id file_id, data_id; int dims[3], rank, start[3] = {0,0,0}; double *grid; dims[0] = g.size.x; dims[1] = g.size.y; dims[2] = g.size.z; rank = dims[2] == 1 ? (dims[1] == 1 ? 1 : 2) : 3; file_id = matrixio_create_serial(filename); data_id = matrixio_create_dataset(file_id, "data", NULL, rank, dims); grid = material_grid_array(&g); matrixio_write_real_data(data_id, dims, start, 1, grid); material_grid_array_release(&g); matrixio_close_dataset(data_id); matrixio_close(file_id); } } void load_material_gridB(material_grid g, string filename, vector3 supercell) { if (mpi_is_master()) { matrixio_id file_id; int dims[3] = {1,1,1}, rank = 3; int nx, ny, nz, ix,iy,iz; double *data, *grid; double sx, sy, sz; file_id = matrixio_open_serial(filename, 1); data = matrixio_read_real_data(file_id, "data", &rank,dims, 0,0,0,0); CHECK(data, "couldn't find dataset in material grid file"); matrixio_close(file_id); nx = g.size.x; ny = g.size.y; nz = g.size.z; sx = supercell.x > 0 ? supercell.x : 1; sy = supercell.y > 0 ? supercell.y : 1; sz = supercell.z > 0 ? supercell.z : 1; grid = material_grid_array(&g); for (ix = 0; ix < nx; ++ix) for (iy = 0; iy < ny; ++iy) for (iz = 0; iz < nz; ++iz) { double dummy; double x,y,z, val; x = modf((ix + 0.5) * (sx / nx), &dummy); y = modf((iy + 0.5) * (sy / ny), &dummy); z = modf((iz + 0.5) * (sz / nz), &dummy); val = linear_interpolate(x,y,z, data, dims[0],dims[1],dims[2], 1); if (val > 1) val = 1; else if (val < 0) val = 0; grid[(ix * ny + iy) * nz + iz] = val; } material_grid_array_release(&g); free(data); } synchronize_material_grid(&g); } /**************************************************************************/ /* A useful thing is to be able to load an epsilon.h5 file and use that as the starting guess for subsequent optimization. However, the relationship between the material grid and the dielectric function can be rather complicated depending on how the user has set up the geometry. So, to load an arbitrary epsilon.h5 starting point, we formulate it as an optimization problem: find the material grid(s) that minimize the squared difference between epsilon and the desired epsilon. */ #ifdef HAVE_NLOPT_H # include #endif typedef struct { int eps_nx, eps_ny, eps_nz; double *eps, *work; material_grid *grids; int ngrids; int iter; } match_eps_data; static double match_eps_func(int n, const double *u, double *grad, void *data) { match_eps_data *d = (match_eps_data *) data; double *eps = d->eps, *work = d->work; int eps_nx = d->eps_nx, eps_ny = d->eps_ny, eps_nz = d->eps_nz; material_grid *grids = d->grids; int ngrids = d->ngrids; double scaleby = 1.0 / H.N, val = 0; int i, j, k, n1, n2, n3, n_other, n_last, rank, last_dim; #ifdef HAVE_MPI int local_n2, local_y_start, local_n3; #endif real s1, s2, s3, c1, c2, c3; material_grids_set(u, d->grids, d->ngrids); reset_epsilon(); if (grad) memset(work, 0, sizeof(double) * n); d->iter++; n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; n_other = mdata->other_dims; n_last = mdata->last_dim_size / (sizeof(scalar_complex)/sizeof(scalar)); last_dim = mdata->last_dim; rank = (n3 == 1) ? (n2 == 1 ? 1 : 2) : 3; s1 = geometry_lattice.size.x / n1; s2 = geometry_lattice.size.y / n2; s3 = geometry_lattice.size.z / n3; c1 = n1 <= 1 ? 0 : geometry_lattice.size.x * 0.5; c2 = n2 <= 1 ? 0 : geometry_lattice.size.y * 0.5; c3 = n3 <= 1 ? 0 : geometry_lattice.size.z * 0.5; /* Here we have different loops over the coordinates, depending upon whether we are using complex or real and serial or parallel transforms. Each loop must define, in its body, variables (i2,j2,k2) describing the coordinate of the current point, and "index" describing the corresponding index in the curfield array. This was all stolen from fields.c...it would be better if we didn't have to cut and paste, sigh. */ #ifdef SCALAR_COMPLEX # ifndef HAVE_MPI for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j, k2 = k; int index = ((i * n2 + j) * n3 + k); # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < n3; ++k) { int i2 = i, j2 = j + local_y_start, k2 = k; int index = ((j * n1 + i) * n3 + k); # endif /* HAVE_MPI */ #else /* not SCALAR_COMPLEX */ # ifndef HAVE_MPI for (i = 0; i < n_other; ++i) for (j = 0; j < n_last; ++j) { int index = i * n_last + j; int i2, j2, k2; switch (rank) { case 2: i2 = i; j2 = j; k2 = 0; break; case 3: i2 = i / n2; j2 = i % n2; k2 = j; break; default: i2 = j; j2 = k2 = 0; break; } # else /* HAVE_MPI */ local_n2 = mdata->local_ny; local_y_start = mdata->local_y_start; /* For a real->complex transform, the last dimension is cut in half. For a 2d transform, this is taken into account in local_ny already, but for a 3d transform we must compute the new n3: */ if (n3 > 1) local_n3 = mdata->last_dim_size / 2; else local_n3 = 1; /* first two dimensions are transposed in MPI output: */ for (j = 0; j < local_n2; ++j) for (i = 0; i < n1; ++i) for (k = 0; k < local_n3; ++k) { # define i2 i int j2 = j + local_y_start; # define k2 k int index = ((j * n1 + i) * local_n3 + k); # endif /* HAVE_MPI */ #endif /* not SCALAR_COMPLEX */ { real epsilon, eps0; double scalegrad; vector3 p; epsilon = mean_epsilon_from_matrix(mdata->eps_inv + index); eps0 = linear_interpolate((i2 + 0.5) / n1, (j2 + 0.5) / n2, (k2 + 0.5) / n3, eps, eps_nx, eps_ny, eps_nz, 1); val += (epsilon - eps0) * (epsilon - eps0); scalegrad = 2.0 * scaleby * (epsilon - eps0); if (grad) { p.x = i2 * s1 - c1; p.y = j2 * s2 - c2; p.z = k2 * s3 - c3; material_grids_addgradient_point(work, p, scalegrad, grids, ngrids); } #ifndef SCALAR_COMPLEX { int last_index; # ifdef HAVE_MPI if (n3 == 1) last_index = j + local_y_start; else last_index = k; # else last_index = j; # endif if (last_index != 0 && 2*last_index != last_dim) { int i2c, j2c, k2c; i2c = i2 ? (n1 - i2) : 0; j2c = j2 ? (n2 - j2) : 0; k2c = k2 ? (n3 - k2) : 0; eps0 = linear_interpolate((i2c + 0.5) / n1, (j2c + 0.5) / n2, (k2c + 0.5) / n3, eps, eps_nx, eps_ny, eps_nz, 1); val += (epsilon - eps0) * (epsilon - eps0); if (grad) { p.x = i2c * s1 - c1; p.y = j2c * s2 - c2; p.z = k2c * s3 - c3; material_grids_addgradient_point(work, p, scalegrad, grids, ngrids); } } } #endif /* !SCALAR_COMPLEX */ } } if (grad) /* gradient w.r.t. epsilon needs to be summed over processes */ mpi_allreduce(work, grad, n, double, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); { double valtmp = val * scaleby; mpi_allreduce(&valtmp, &val, 1, double, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); } mpi_one_printf("match-epsilon-file:, %d, %g\n", d->iter, sqrt(val)); return val; } void material_grids_match_epsilon_fileB(string filename, number eps_tol) { int dims[3] = {1,1,1}, rank = 3; matrixio_id file_id; match_eps_data d; int i, n, have_uprod; double *u, *lb, *ub, *u_tol, func_min; file_id = matrixio_open_serial(filename, 1); d.eps = matrixio_read_real_data(file_id, NULL, &rank,dims, 0,0,0,0); CHECK(d.eps, "couldn't find dataset in epsilon file"); matrixio_close(file_id); d.eps_nx = dims[0]; d.eps_ny = dims[1]; d.eps_nz = dims[2]; d.grids = get_material_grids(geometry, &d.ngrids); d.iter = 0; n = material_grids_ntot(d.grids, d.ngrids); u = (double *) malloc(sizeof(double) * n * 5); lb = u + n; ub = lb + n; u_tol = ub + n; d.work = u_tol + n; material_grids_get(u, d.grids, d.ngrids); for (i = 0; i < d.ngrids && d.grids[i].material_grid_kind != U_PROD; ++i); have_uprod = i < d.ngrids; for (i = 0; i < n; ++i) { ub[i] = 1; u_tol[i] = eps_tol; lb[i] = have_uprod ? 1e-4 : 0; if (u[i] < lb[i]) u[i] = lb[i]; } #if defined(HAVE_NLOPT_H) && defined(HAVE_NLOPT) { nlopt_result res; res = nlopt_minimize(NLOPT_LD_MMA, n, match_eps_func, &d, lb, ub, u, &func_min, -HUGE_VAL, 0,0, 0,u_tol, 0,0); CHECK(res > 0, "failure of nlopt_minimize"); } #else CHECK(0, "nlopt library is required for match-epsilon-file"); #endif material_grids_set(u, d.grids, d.ngrids); reset_epsilon(); mpi_one_printf("match-epsilon-file converged to %g after %d iterations\n", sqrt(func_min), d.iter); free(u); free(d.eps); } /**************************************************************************/ mpb-1.5/mpb/mpb.scm.in0000644000175400001440000010552512315341423011531 00000000000000; Copyright (C) 1999-2014 Massachusetts Institute of Technology. ; ; 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 ; **************************************************************** ; Get the number of arguments to a function p. However, some ; older versions of Guile (e.g. 1.2) do not support the 'arity ; property, and procedure-property just returns false. In ; this case, we assume that the procedure returns 1 argument, ; as this is the most useful default for our purposes. Sigh. (define (procedure-num-args p) (let ((arity (procedure-property p 'arity))) (if arity (car arity) 1))) ; **************************************************************** (define-class material-type no-parent) (define-class dielectric material-type (define-property epsilon no-default 'number)) (define (index n) (epsilon (* n n))) ; convenient substitute for epsilon (define-class dielectric-anisotropic material-type (define-property epsilon-diag no-default 'vector3) (define-property epsilon-offdiag (vector3 0 0 0) 'cvector3) (define-property epsilon-offdiag-imag (vector3 0 0 0) 'vector3)) (define-class material-function material-type (define-property material-func no-default 'function (lambda (p) (= 1 (procedure-num-args p))))) (define (epsilon-func f) ; convenience wrapper (material-func (lambda (p) (make dielectric (epsilon (f p)))))) ; must match material_grid_kinds in mpb.h (define U-MIN 0) (define U-PROD 1) (define U-SUM 2) (define-class material-grid material-type (define-property material-grid-kind U-MIN 'integer (lambda (k) (and (>= k U-MIN) (<= k U-SUM)))) (define-property epsilon-min no-default 'number) (define-property epsilon-max no-default 'number) (define-property size no-default 'vector3 (lambda (sz) (for-all? (vector->list sz) (lambda (x) (and (integer? x) (positive? x)))))) (define-property matgrid-init (lambda (x y z) 0.5) 'function (lambda (p) (= 3 (procedure-num-args p)))) (define-derived-property matgrid 'SCM (lambda (object) (let ((sz (object-property-value object 'size)) (i (object-property-value object 'matgrid-init))) (let ((g (apply make-uniform-array (cons 0.333 (map inexact->exact (vector->list sz)))))) (array-index-map! g (lambda (x y z) (i (- (/ x (vector3-x sz)) 0.5) (- (/ y (vector3-y sz)) 0.5) (- (/ z (vector3-z sz)) 0.5)))) g))))) ; use the solid geometry classes, variables, etcetera in libgeom: ; (one specifications file can include another specifications file) (include "@LIBCTL_DIR@/utils/geom.scm") ; define nlopt constants if available (if (file-exists? "@LIBCTL_DIR@/utils/nlopt-constants.scm") (include "@LIBCTL_DIR@/utils/nlopt-constants.scm")) ; **************************************************************** ; eigensolver flags (grabbed from eigensolver.h by configure) ; first, we must define a function (pow2 n) to return 2^n: (define (pow2 n) (if (<= n 0) 1 (* 2 (pow2 (- n 1))))) @EIGS_FLAGS_SCM@ ; substituted by configure script ; **************************************************************** ; More input/output variables (besides those defined by libgeom, above). (define-input-var k-points '() (make-list-type 'vector3)) (define-input-var num-bands 1 'integer) (define-input-var tolerance 1.0e-7 'number positive?) (define-input-var target-freq 0.0 'number (lambda (x) (>= x 0))) (define-input-var mesh-size 3 'integer positive?) (define-input-var epsilon-input-file "" 'string) (define-input-var deterministic? false 'boolean) ; Eigensolver minutiae: (define-input-var simple-preconditioner? false 'boolean) (define-input-var eigensolver-flags EIGS_DEFAULT_FLAGS 'integer) (define-input-var eigensolver-block-size -11 'integer) (define-input-var eigensolver-nwork 3 'integer positive?) (define-input-var eigensolver-davidson? false 'boolean) (define-input-output-var eigensolver-flops 0 'number) (define-output-var freqs (make-list-type 'number)) (define-output-var iterations 'integer) (define-output-var parity 'string) (define-input-var negative-epsilon-ok? false 'boolean) (define (allow-negative-epsilon) (set! negative-epsilon-ok? true) (set! target-freq (/ 1 infinity))) ; **************************************************************** ; Definitions of external (C) functions: ; (init-params p true) initializes the geometry, etcetera, and does ; everything else that's needed to get ready for an eigenvalue ; calculation with parity p (see below). This should be called ; after the input variables are changed. If false is passed instead ; of true, fields from a previous run are retained, if possible, as a ; starting point for the eigensolver. (define-external-function init-params true false no-return-value 'integer 'boolean) ; (set-parity p) changes the parity that is solved for by ; solve-kpoint, below. p should be one of the following constants ; init-params should already have been called. Be sure to call ; (randomize-fields) if you change the parity without calling ; init-params. (define NO-PARITY 0) (define EVEN-Z 1) (define ODD-Z 2) (define EVEN-Y 4) (define ODD-Y 8) (define TE EVEN-Z) (define TM ODD-Z) (define PREV-PARITY -1) (define-external-function set-parity false false no-return-value 'integer) (define set-polarization set-parity) ; backwards compatibility ; (randomize-fields) initializes the fields to random values; should ; only be called after init-params. (define-external-function randomize-fields false false no-return-value) ; (solve-kpoint kpoint) solves for the specified bands at the given k point. ; Requires that (init-params) has been called, and does not re-read the ; input variables, but does write the output vars. (define-external-function solve-kpoint false true no-return-value 'vector3) (define-external-function get-dfield false false no-return-value 'integer) (define-external-function get-hfield false false no-return-value 'integer) (define-external-function get-efield-from-dfield false false no-return-value) (define-external-function get-epsilon false false no-return-value) (define-external-function fix-field-phase false false no-return-value) (define-external-function compute-field-energy false false (make-list-type 'number)) (define-external-function compute-field-divergence false false no-return-value) (define-external-function get-epsilon-point false false 'number 'vector3) (define-external-function get-epsilon-inverse-tensor-point false false 'cmatrix3x3 'vector3) (define-external-function get-energy-point false false 'number 'vector3) (define get-scalar-field-point get-energy-point) (define-external-function get-bloch-field-point false false 'cvector3 'vector3) (define-external-function get-field-point false false 'cvector3 'vector3) (define-external-function get-bloch-cscalar-point false false 'cnumber 'vector3) (define-external-function get-cscalar-point false false 'cnumber 'vector3) (define-external-function compute-energy-in-dielectric false false 'number 'number 'number) (define-external-function compute-field-integral false false 'cnumber 'function) (define-external-function compute-energy-integral false false 'number 'function) (define-external-function compute-energy-in-object-list false false 'number (make-list-type 'geometric-object)) (define-external-function output-field-to-file false false no-return-value 'integer 'string) (define-external-function mpi-is-master? false false 'boolean) (define-external-function using-mpi? false false 'boolean) (define-external-function mpi-num-procs false false 'integer) (define-external-function mpi-proc-index false false 'integer) (define-external-function mpi-max false false 'number 'number) (define-external-function get-kpoint-index false false 'integer) (define-external-function set-kpoint-index false false no-return-value 'integer) (define-external-function sqmatrix-size false false 'integer 'SCM) (define-external-function sqmatrix-ref false false 'cnumber 'SCM 'integer 'integer) (define-external-function get-eigenvectors false false 'SCM 'integer 'integer) (define-external-function set-eigenvectors false false no-return-value 'SCM 'integer) (define-external-function dot-eigenvectors false false 'SCM 'SCM 'integer) (define-external-function scale-eigenvector false false no-return-value 'integer 'cnumber) (define-external-function output-eigenvectors false false no-return-value 'SCM 'string) (define-external-function input-eigenvectors false false 'SCM 'string 'integer) (define-external-function save-eigenvectors false false no-return-value 'string) (define-external-function load-eigenvectors false false no-return-value 'string) (define cur-field 'cur-field) (define-external-function cur-field? false false 'boolean 'SCM) (define-external-function rscalar-field-make false false 'SCM 'SCM) (define-external-function cvector-field-make false false 'SCM 'SCM) (define-external-function cvector-field-nonbloch! false false no-return-value 'SCM) (define-external-function field-make false false 'SCM 'SCM) (define-external-function fields-conform? false false 'boolean 'SCM 'SCM) (define-external-function field-set! false false no-return-value 'SCM 'SCM) (define (field-copy f) (let ((f' (field-make f))) (field-set! f' f) f')) (define-external-function field-load false false no-return-value 'SCM) (define-external-function field-mapL! false false no-return-value 'SCM 'function (make-list-type 'SCM)) (define (field-map! dest f . src) (apply field-mapL! (list dest f src))) (define-external-function integrate-fieldL false false 'cnumber 'function (make-list-type 'SCM)) (define (integrate-fields f . src) (apply integrate-fieldL (list f src))) (define-external-function rscalar-field-get-point false false 'number 'SCM 'vector3) (define-external-function cscalar-field-get-point false false 'cnumber 'SCM 'vector3) (define-external-function cvector-field-get-point false false 'cvector3 'SCM 'vector3) (define-external-function cvector-field-get-point-bloch false false 'cvector3 'SCM 'vector3) (define-external-function randomize-material-grid! false false no-return-value 'material-grid 'number) (define-external-function save-material-grid false false no-return-value 'material-grid 'string) (define-external-function load-material-grid! false false no-return-value 'material-grid 'string 'vector3) (define-external-function material-grids-match-epsilon-file! false false no-return-value 'string 'number) (define-external-function print-material-grids-gradient false false no-return-value 'integer) (define-external-function print-material-grids-deps-du false false no-return-value) (define-external-function print-material-grids-deps-du-numeric false false no-return-value 'number) (define-external-function material-grids-approx-gradient false false 'number 'vector3 'integer 'integer 'number) (define-external-function material-grids-maxgap false false 'number (make-list-type 'vector3) 'integer 'integer 'number 'number 'integer 'number) (define-external-function material-grids-mingap false false 'number (make-list-type 'vector3) 'integer 'integer 'number 'number 'integer 'number) ; **************************************************************** ; Set print-ok? to whether or not we are the MPI master process. ; However, don't try this if we are running within gen-ctl-io, ; as it won't work. (if (not (defined? 'output-source)) ; (a function defined by gen-ctl-io) (set! print-ok? (mpi-is-master?))) (if (and (not (defined? 'output-source)) (using-mpi?)) (set! interactive? false)) ; MPI doesn't support interactive mode ; **************************************************************** ; Utility function to display a comma-delimited list of data for the ; current k point, prefixed by data-name and the current parity. (define (display-kpoint-data data-name data) (print parity data-name ":, " (get-kpoint-index)) (map (lambda (d) (print ", " d)) data) (print "\n")) ; **************************************************************** ; Computing parities: (define-external-function compute-zparities false false (make-list-type 'number)) (define-external-function compute-yparities false false (make-list-type 'number)) (define (display-zparities) (display-kpoint-data "zparity" (compute-zparities))) (define (display-yparities) (display-kpoint-data "yparity" (compute-yparities))) ; **************************************************************** ; Computing group velocities: (define-external-function compute-group-velocity-component false false (make-list-type 'number) 'vector3) (define-external-function compute-1-group-velocity-component false false 'number 'vector3 'integer) (define-external-function compute-1-group-velocity false false 'vector3 'integer) (define-external-function compute-1-group-velocity-reciprocal false false 'vector3 'integer) ; Return a list of the group velocity vector3's, in the cartesian ; basis (and units of c): (define (compute-group-velocities) (let ((vx (compute-group-velocity-component (cartesian->reciprocal (vector3 1 0 0)))) (vy (compute-group-velocity-component (cartesian->reciprocal (vector3 0 1 0)))) (vz (compute-group-velocity-component (cartesian->reciprocal (vector3 0 0 1))))) (map (lambda (x y z) (vector3 x y z)) vx vy vz))) ; Define a band function to be passed to run, so that you can easily ; display the group velocities for each k-point. (define (display-group-velocities) (display-kpoint-data "velocity" (compute-group-velocities))) ; **************************************************************** ; Add some predefined variables, for convenience: (define vacuum (make dielectric (epsilon 1.0))) (define air vacuum) (define infinity 1.0e20) ; big number for infinite dimensions of objects (set! default-material air) ; **************************************************************** ; **************************************************************** ; The remainder of this file consists of Scheme convenience functions. ; **************************************************************** ; **************************************************************** ; Interpolate a list of k points, with an interpolation density ; proportional to the distance in k-space (define (kinterpolate-uniform n ks) (map cartesian->reciprocal (interpolate-uniform n (map reciprocal->cartesian ks)))) ; Function to convert a k-point k into an equivalent point in the ; first Brillouin zone (not necessarily the irreducible Brillouin zone): (define (first-brillouin-zone k) (define (n k) (vector3-norm (reciprocal->cartesian k))) (define (try+ k v) (if (< (n (vector3+ k v)) (n k)) (try+ (vector3+ k v) v) k)) (define (try k v) (try+ (try+ k v) (vector3- (vector3 0) v))) (define trylist (list #(1 0 0) #(0 1 0) #(0 0 1) #(0 1 1) #(1 0 1) #(1 1 0) #(0 1 -1) #(1 0 -1) #(1 -1 0) #(1 1 1) #(-1 1 1) #(1 -1 1) #(1 1 -1) )) (define (try-all k) (fold-left try k trylist) ) (define (try-all&repeat k) (let ((knew (try-all k))) (if (< (n knew) (n k)) (try-all&repeat knew) k))) (let ((k0 (vector3- k (vector-map round k)))) (if (< (n k0) (n k)) (try-all&repeat k0) (try-all&repeat k)))) ; **************************************************************** ; functions to manipulate the fields; these are mainly convenient ; wrappers for the external functions defined previously. (define (get-efield which-band) (get-dfield which-band) (get-efield-from-dfield)) (define (get-charge-density which-band) (get-efield which-band) (compute-field-divergence)) (define-param filename-prefix "") (define (get-filename-prefix) (if (eq? filename-prefix false) "" (if (and (not (null? include-files)) (string-null? filename-prefix)) (string-append (strip-suffix ".scm" (strip-suffix ".ctl" (cdr (split-pathname (car include-files))))) "-") filename-prefix))) (define (output-field) (output-field-to-file -1 (get-filename-prefix))) (define (output-field-x) (output-field-to-file 0 (get-filename-prefix))) (define (output-field-y) (output-field-to-file 1 (get-filename-prefix))) (define (output-field-z) (output-field-to-file 2 (get-filename-prefix))) (define (output-epsilon) (get-epsilon) (output-field-to-file -1 (get-filename-prefix))) (define (compute-energy-in-objects . objects) (compute-energy-in-object-list objects)) ; **************************************************************** ; Functions to compute and output gaps, given the lists of frequencies ; computed at each k point. ; The band-range-data is a list if ((min . k-point) . (max . k-point)) ; pairs, with each pair describing the frequency range of a band and ; the k-points where it achieves its maximum/minimum. Here, we update ; this data with a new list of band frequencies, and return the new ; data. If band-range-data is null or too short, the needed entries ; will be created. (define (update-band-range-data band-range-data freqs k-point) (define (ubrd band-range-data freqs br-start) (if (null? freqs) (append (reverse br-start) band-range-data) (let ((br (if (null? band-range-data) (cons (cons infinity -1) (cons (- infinity) -1)) (car band-range-data))) (br-rest (if (null? band-range-data) '() (cdr band-range-data)))) (let ((newmin (if (< (car freqs) (caar br)) (cons (car freqs) k-point) (car br))) (newmax (if (> (car freqs) (cadr br)) (cons (car freqs) k-point) (cdr br)))) (ubrd br-rest (cdr freqs) (cons (cons newmin newmax) br-start)))))) (ubrd band-range-data freqs '())) ; Output the band range data in a nice format: (define (output-band-range-data br-data) (define (obr br i) (if (not (null? br)) (begin (print "Band " i " range: " (caaar br) " at " (cdaar br) " to " (cadar br) " at " (cddar br) "\n") (obr (cdr br) (+ i 1))))) (obr br-data 1)) ; Output any gaps in the given band ranges, and return a list ; of the gaps as a list of (percent freq-min freq-max) lists. (define (output-gaps band-range-data) (define (ogaps br-cur br-rest i gaps) (if (null? br-rest) (reverse gaps) (if (>= (cadr br-cur) (caaar br-rest)) (ogaps (car br-rest) (cdr br-rest) (+ i 1) gaps) (let ((gap-size (/ (* 200 (- (caaar br-rest) (cadr br-cur))) (+ (caaar br-rest) (cadr br-cur))))) (print "Gap from band " i " (" (cadr br-cur) ") to band " (+ i 1) " (" (caaar br-rest) "), " gap-size "%\n") (ogaps (car br-rest) (cdr br-rest) (+ i 1) (cons (list gap-size (cadr br-cur) (caaar br-rest)) gaps)) )))) (if (null? band-range-data) '() (ogaps (car band-range-data) (cdr band-range-data) 1 '()))) ; variables holding the band range data and current list of gaps, in ; the format returned by update-band-range-data and output-gaps, above: (define band-range-data '()) (define gap-list '()) ; Return the frequency gap from the band #lower-band to the band ; #(lower-band+1), as a percentage of mid-gap frequency. The "gap" ; may be negative if the maximum of the lower band is higher than the ; minimum of the upper band. (The gap is computed from the ; band-range-data of the previous run.) (define (retrieve-gap lower-band) (if (> (+ lower-band 1) (length band-range-data)) (error "retrieve-gap called for higher band than was calculated") (let ((f1 (cadr (list-ref band-range-data (- lower-band 1)))) (f2 (caar (list-ref band-range-data lower-band)))) (/ (- f2 f1) (* 0.005 (+ f1 f2)))))) ; **************************************************************** ; stuff to keep statistics on the eigensolver performance, for tuning: (define eigensolver-iters '()) ; the iterations used, updated by (run) (define total-run-time 0.0) ; the total time used by (run) functions (seconds) (define (display-eigensolver-stats) (let ((num-runs (length eigensolver-iters))) (if (> num-runs 0) (let ((min-iters (apply min eigensolver-iters)) (max-iters (apply max eigensolver-iters)) (mean-iters (/ (fold-right + 0 eigensolver-iters) num-runs))) (print "eigensolver iterations for " num-runs " k-points: " min-iters "-" max-iters ", mean = " mean-iters) (if (defined? 'sort) ; sort was added in Guile 1.3.x (let ((sorted-iters (sort eigensolver-iters <))) (let ((median-iters (* 0.5 (+ (list-ref sorted-iters (quotient num-runs 2)) (list-ref sorted-iters (- (quotient (+ num-runs 1) 2) 1)))))) (print ", median = " median-iters)))) (print "\nmean flops per iteration = " (/ eigensolver-flops (* num-runs mean-iters)) "\n") (print "mean time per iteration = " (/ total-run-time (* mean-iters num-runs)) " s\n"))))) ; **************************************************************** ; Define an easy way for the user to split the k-points list over multiple ; processes. k-split-num is the number of chunks to split the k-points into, ; and k-split-index is the index of the current chunk (0 to k-split-num - 1). (define-param k-split-num 1) (define-param k-split-index 0) ; Split a list L into num more-or-less equal pieces, returning the piece ; given by index (in 0..num-1), along with the index in L of the first ; element of the piece, as a car pair: (first-index . piece-of-L). (define (list-split L num index) (define (list-sub L start len index rest) (if (null? L) (reverse rest) (if (and (>= index start) (< index (+ start len))) (list-sub (cdr L) start len (+ index 1) (cons (car L) rest)) (list-sub (cdr L) start len (+ index 1) rest)))) (if (or (>= index num) (negative? index)) (cons (length L) '()) (let ((block-size (quotient (+ (length L) num -1) num))) (let ((start (* index block-size)) (len (min block-size (- (length L) (* index block-size))))) (cons start (list-sub L start len 0 '())))))) ; **************************************************************** (define current-k (vector3 0)) ; current k point in the run function (define all-freqs '()) ; list of all freqs computed in a run ; (run) functions, to do vanilla calculations. They all take zero or ; more "band functions." Each function should take a single ; parameter, the band index, and is called for each band index at ; every k point. These are typically used to output the bands. (define (run-parity p reset-fields . band-functions) (set! total-run-time (+ total-run-time (begin-time "total elapsed time for run: " (set! all-freqs '()) (set! band-range-data '()) (set! interactive? false) ; don't be interactive if we call (run) (begin-time "elapsed time for initialization: " (init-params p (if reset-fields true false)) (if (string? reset-fields) (load-eigenvectors reset-fields))) (let ((k-split (list-split k-points k-split-num k-split-index))) (set-kpoint-index (car k-split)) (if (zero? (car k-split)) (output-epsilon)) ; output epsilon immediately for 1st k block (if (> num-bands 0) (begin (map (lambda (k) (set! current-k k) (begin-time "elapsed time for k point: " (solve-kpoint k)) (set! all-freqs (cons freqs all-freqs)) (set! band-range-data (update-band-range-data band-range-data freqs k)) (set! eigensolver-iters (append eigensolver-iters (list (/ iterations num-bands)))) (map (lambda (f) (if (zero? (procedure-num-args f)) (f) ; f is a thunk: evaluate once per k-point (do ((band 1 (+ band 1))) ((> band num-bands)) (f band)))) band-functions)) (cdr k-split)) (if (> (length (cdr k-split)) 1) (begin (output-band-range-data band-range-data) (set! gap-list (output-gaps band-range-data))) (set! gap-list '())))))))) (set! all-freqs (reverse all-freqs)) ; put them in the right order (print "done.\n")) (define run-polarization run-parity) ; backwards compatibility ; a macro to create a run function with a given name and parity (defmacro-public define-run (name parity) `(define (,name . band-functions) (apply run-parity (append (list ,parity true) band-functions)))) (define-run run NO-PARITY) (define-run run-zeven EVEN-Z) (define-run run-zodd ODD-Z) (define-run run-yeven EVEN-Y) (define-run run-yodd ODD-Y) (define-run run-yeven-zeven (+ EVEN-Y EVEN-Z)) (define-run run-yeven-zodd (+ EVEN-Y ODD-Z)) (define-run run-yodd-zeven (+ ODD-Y EVEN-Z)) (define-run run-yodd-zodd (+ ODD-Y ODD-Z)) (define run-even run-zeven) ; backwards compatibility (define run-odd run-zodd) ; backwards compatibility (define run-te run-zeven) (define run-tm run-zodd) (define run-te-yeven run-yeven-zeven) (define run-te-yodd run-yodd-zeven) (define run-tm-yeven run-yeven-zodd) (define run-tm-yodd run-yodd-zodd) ; **************************************************************** ; Some predefined output functions (functions of the band index), ; for passing to (run). (define (output-hfield which-band) (get-hfield which-band) (output-field)) (define (output-hfield-x which-band) (get-hfield which-band) (output-field-x)) (define (output-hfield-y which-band) (get-hfield which-band) (output-field-y)) (define (output-hfield-z which-band) (get-hfield which-band) (output-field-z)) (define (output-dfield which-band) (get-dfield which-band) (output-field)) (define (output-dfield-x which-band) (get-dfield which-band) (output-field-x)) (define (output-dfield-y which-band) (get-dfield which-band) (output-field-y)) (define (output-dfield-z which-band) (get-dfield which-band) (output-field-z)) (define (output-efield which-band) (get-efield which-band) (output-field)) (define (output-efield-x which-band) (get-efield which-band) (output-field-x)) (define (output-efield-y which-band) (get-efield which-band) (output-field-y)) (define (output-efield-z which-band) (get-efield which-band) (output-field-z)) (define (output-hpwr which-band) (get-hfield which-band) (compute-field-energy) (output-field)) (define (output-dpwr which-band) (get-dfield which-band) (compute-field-energy) (output-field)) (define (output-charge-density which-band) (get-charge-density which-band) (output-field-to-file -1 (get-filename-prefix))) (define (get-poynting which-band) (get-efield which-band) ; put E in cur-field (let ((e (field-copy cur-field))) ; ... and copy to local var. (get-hfield which-band) ; put H in cur-field (field-map! cur-field ; write ExH to cur-field (lambda (e h) (vector3-cross (vector3-conj e) h)) e cur-field) (cvector-field-nonbloch! cur-field))) (define (output-poynting which-band) (get-poynting which-band) (output-field-to-file -1 (string-append (get-filename-prefix) "flux."))) (define (output-poynting-x which-band) (get-poynting which-band) (output-field-to-file 0 (string-append (get-filename-prefix) "flux."))) (define (output-poynting-y which-band) (get-poynting which-band) (output-field-to-file 1 (string-append (get-filename-prefix) "flux."))) (define (output-poynting-z which-band) (get-poynting which-band) (output-field-to-file 2 (string-append (get-filename-prefix) "flux."))) (define (get-tot-pwr which-band) (get-dfield which-band) (compute-field-energy) (let ((epwr (field-copy cur-field)) (tot-pwr (rscalar-field-make cur-field))) (get-hfield which-band) (compute-field-energy) (field-map! tot-pwr (lambda (epwr hpwr) (+ epwr hpwr)) epwr cur-field) (field-load tot-pwr))) (define (output-tot-pwr which-band) (get-tot-pwr which-band) (output-field-to-file -1 (string-append (get-filename-prefix) "tot."))) ; We need a special function to evaluate band functions, since ; band functions can either be a function of the band number or ; a thunk (function of no arguments, evaluated once per k-point). (define (apply-band-func-thunk band-func which-band eval-thunk?) (if (zero? (procedure-num-args band-func)) (if eval-thunk? (band-func)) ; evaluate thunks once per k-point (band-func which-band))) (define (apply-band-func band-func which-band) (apply-band-func-thunk band-func which-band (= which-band 1))) ; The following function returns an output function that calls ; output-func for bands with D energy in objects > min-energy. ; For example, (output-dpwr-in-objects output-dfield 0.20 some-object) ; would return an output function that would spit out the D field ; for bands with at least %20 of their D energy in some-object. (define (output-dpwr-in-objects output-func min-energy . objects) (lambda (which-band) (get-dfield which-band) (compute-field-energy) (let ((energy (compute-energy-in-object-list objects))) ; output the computed energy for grepping: (print "dpwr:, " which-band ", " (list-ref freqs (- which-band 1)) ", " energy "\n") (if (>= energy min-energy) (apply-band-func output-func which-band))))) ; Combines zero or more band functions into one: (define (combine-band-functions . band-funcs) (lambda (which-band) (map (lambda (f) (apply-band-func f which-band)) band-funcs))) ; Only invoke the given band functions for the specified k-point: (define (output-at-kpoint kpoint . band-funcs) (let ((band-func (apply combine-band-functions band-funcs))) (lambda (which-band) (if (vector3-close? current-k kpoint (* 1e-8 (vector3-norm kpoint))) (band-func which-band))))) ; Band functions to pick a canonical phase for the eigenstate of the ; given band based upon the spatial representation of the given field: (define (fix-hfield-phase which-band) (get-hfield which-band) (fix-field-phase)) (define (fix-dfield-phase which-band) (get-dfield which-band) (fix-field-phase)) (define (fix-efield-phase which-band) (get-efield which-band) (fix-field-phase)) ; **************************************************************** ; Here, we solve the inverse problem, that of solving for the ; wavevectors for a set of bands at a given frequency. To do ; this, we use the fact that we can compute the group velocities ; cheaply, and thus can employ find-root-deriv (Newton's method). ; Moreover, we save information gathered while finding the k's of ; higher bands to speed the computation for lower bands. (define (find-k p omega band-min band-max korig-and-kdir tol kmag-guess kmag-min kmag-max . band-funcs) (define (ncdr n lst) (if (> n 0) (ncdr (- n 1) (cdr lst)) lst)) (define korig (if (pair? korig-and-kdir) (car korig-and-kdir) (vector3 0))) (define kdir (if (pair? korig-and-kdir) (cdr korig-and-kdir) korig-and-kdir)) (let ((num-bands-save num-bands) (k-points-save k-points) (nb (- band-max band-min -1)) (kdir1 (cartesian->reciprocal (unit-vector3 (reciprocal->cartesian kdir)))) ; k0s is an array caching the best k value found for each band: (k0s (if (list? kmag-guess) (list->vector kmag-guess) (make-vector (- band-max band-min -1) kmag-guess))) ; bktab is a table (assoc. list) to memoize all (band . k) results: (bktab '())) (define (rootfun b) (lambda (k) (let ((tab-val (assoc (cons b k) bktab))) ; first, look in cached table (if tab-val (begin ; use cached result if available (print "find-k " b " at " k ": " (cadr tab-val) " (cached)\n") (cdr tab-val)) (begin ; otherwise, compute bands and cache results (set! num-bands b) (set! k-points (list (vector3+ korig (vector3-scale k kdir1)))) (run-parity p false) (let ((v (compute-group-velocity-component kdir1))) ; cache computed values: (map (lambda (b f v) (let ((tabval (assoc (cons b (vector-ref k0s (- b band-min))) bktab))) (if (or (not tabval) (< (abs (- f omega)) (abs (cadr tabval)))) (vector-set! k0s (- b band-min) k))) ; cache k0 (set! bktab (cons (cons (cons b k) (cons (- f omega) v)) bktab))) (arith-sequence band-min 1 (- b band-min -1)) (ncdr (- band-min 1) freqs) (ncdr (- band-min 1) v)) ; finally return (frequency - omega . derivative): (let ((fun (- (car (reverse freqs)) omega))) (print "find-k " b " at " k ": " fun "\n") (cons fun (car (reverse v)))))))))) (randomize-fields) ; don't let previous computations interfere (let ((ks (reverse (map (lambda (b) (find-root-deriv (rootfun b) tol kmag-min kmag-max (vector-ref k0s (- b band-min)))) (arith-sequence band-max -1 nb))))) (if (not (null? band-funcs)) (map (lambda (b k) (set! num-bands b) (set! k-points (list (vector3+ korig (vector3-scale k kdir1)))) (run-parity p false (lambda (b') (if (= b' b) (map (lambda (f) (apply-band-func-thunk f b true)) band-funcs))))) (arith-sequence band-max -1 nb) (reverse ks))) (set! num-bands num-bands-save) (set! k-points k-points-save) (print parity "kvals:, " omega ", " band-min ", " band-max) (vector-map (lambda (k) (print ", " k)) korig) (vector-map (lambda (k) (print ", " k)) kdir1) (map (lambda (k) (print ", " k)) ks) (print "\n") ks))) ; **************************************************************** (define (sqmatrix-diag m) (map (lambda (i) (sqmatrix-ref m i i)) (arith-sequence 0 1 (sqmatrix-size m)))) (define (fix-phase-consistency old-eigs first-band) (let ((dots (dot-eigenvectors old-eigs first-band))) (let ((phases (map (lambda (d) (conj (make-polar 1 (angle d)))) (sqmatrix-diag dots)))) (map (lambda (i phase) (scale-eigenvector i phase) (conj phase)) (arith-sequence first-band 1 (length phases)) phases)))) ; **************************************************************** ; find the smallest integer >= N that has prime factors all <= 7 (define (next-factor2357 N) (define (factor2357? N) (define (divby N p) (if (zero? (remainder N p)) (divby (quotient N p) p) N)) (= 1 (divby (divby (divby (divby N 2) 3) 5) 7))) (if (factor2357? N) N (next-factor2357 (+ N 1)))) ; Round the grid size to the next highly-composite size, for FFT efficiency (define (optimize-grid-size!) (set! grid-size false) (set! grid-size (vector-map next-factor2357 (get-grid-size)))) ; **************************************************************** ; Load GNU Readline support, for easier command-line editing support. ; This is not loaded in by default in Guile 1.3.2+ because readline ; is licensed under the GPL, which would have caused Guile to effectively ; be under the GPL itself. However, since the MIT Photonic Bands package ; is under the GPL too, we can load Readline by default with no problems. @ACTIVATE_READLINE@ ; command to activate readline is determined by configure (ctl-set-prompt! "mpb> ") ; **************************************************************** mpb-1.5/configure.ac0000644000175400001440000004744012315336723011362 00000000000000# Process this file with autoconf to produce a configure script. AC_INIT(mpb, 1.5, stevenj@alum.mit.edu) AC_CONFIG_SRCDIR([src/matrices/matrices.c]) AC_CONFIG_HEADER([config.h src/mpbconf.h]) AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE # Shared-library version number; indicates api compatibility, and is # not the same as the "public" version number. (Don't worry about this # except for public releases.) SHARED_VERSION_INFO="0:0:0" AM_INIT_AUTOMAKE([foreign check-news color-tests parallel-tests silent-rules 1.11]) AM_SILENT_RULES(yes) AC_SUBST(SHARED_VERSION_INFO) AM_ENABLE_SHARED(no) dnl shared libs cause too many headaches to be default AC_PROG_LIBTOOL ########################################################################### MPB_VERSION=$PACKAGE_VERSION AC_SUBST(MPB_VERSION) AC_PROG_F77 # Get C compiler. AC_MSG_CHECKING([for vendor cc to be used instead of gcc]) AC_MSG_RESULT() AC_CHECK_PROGS(CC, cc xlc) # prefer vendor cc, to stay in sync with Fortran AC_PROG_CC AM_PROG_CC_C_O AC_ARG_ENABLE(single, [AC_HELP_STRING([--enable-single],[compile for single precision])], enable_single=$enableval, enable_single=no) if test "$enable_single" = "yes"; then AC_DEFINE(SCALAR_SINGLE_PREC,1,[Define to use single precision]) echo "*********************** SINGLE PRECISION ***********************" fi AC_ARG_ENABLE(long-double, [AC_HELP_STRING([--enable-long-double],[compile for long-double precision])], enable_long_double=$enableval, enable_long_double=no) if test "$enable_long_double" = "yes"; then AC_DEFINE(SCALAR_LONG_DOUBLE_PREC,1,[Define to use long-double precision]) echo "****************** LONG-DOUBLE PRECISION ***********************" fi AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[compile for debugging])], ok=$enableval, ok=no) if test "$ok" = "yes"; then CFLAGS="-g" AC_DEFINE(DEBUG,1,[Define to turn on debugging checks]) fi AC_ARG_ENABLE(debug-malloc, [AC_HELP_STRING([--enable-debug-malloc],[use debug malloc/free])], ok=$enableval, ok=no) if test "$ok" = "yes"; then AC_DEFINE(DEBUG_MALLOC,1,[Define to use debugging malloc/free]) fi AC_ARG_ENABLE(prof, [AC_HELP_STRING([--enable-prof],[compile for profiling])], ok=$enableval, ok=no) if test "$ok" = "yes"; then CFLAGS="$CFLAGS -pg" AC_DEFINE(ENABLE_PROF,1,[Define when using the profiler tool]) fi AC_ARG_ENABLE(checks, [AC_HELP_STRING([--disable-checks],[disable runtime checks])], ok=$enableval, ok=yes) if test "$ok" = "no"; then AC_DEFINE(CHECK_DISABLE,1,[Define to disable sanity checks in code]) fi AC_ARG_ENABLE(kottke, [AC_HELP_STRING([--disable-kottke],[disable new anisotropic smoothing based on Kottke algorithm])], ok=$enableval, ok=yes) if test "$ok" = "yes"; then AC_DEFINE(KOTTKE,1,[Define to enable Kottke anisotropic smoothing]) fi AC_ARG_WITH(inv-symmetry,[AC_HELP_STRING([--with-inv-symmetry],[take advantage of (and require) inv. sym.])], inv_sym=$withval, inv_sym=no) if test "$inv_sym" = "no"; then AC_DEFINE(SCALAR_COMPLEX,1,[Define to use complex fields and not to require inversion symmetry]) SCALAR_TYPE=complex else SCALAR_TYPE=real # Make installed program mpbi instead of mpb, but don't change mpb-data MPB_SUFFIX="i" echo "*********************** INVERSION SYM. ***********************" fi AC_SUBST(SCALAR_TYPE) AC_ARG_WITH(hermitian-eps,[AC_HELP_STRING([--with-hermitian-eps],[allow complex-Hermitian dielectric tensors])], hermitian_epsilon=$withval, hermitian_epsilon=no) if test "$hermitian_epsilon" = "yes"; then AC_DEFINE(WITH_HERMITIAN_EPSILON,1,[Define to support Hermitian/complex dielectric tensors.]) echo "*********************** HERMITIAN EPS. ***********************" fi # Add lots of compiler warnings to check for if we are using gcc: # (The variable $GCC is set to "yes" by AC_PROG_CC if we are using gcc.) if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -Wall -W -Wbad-function-cast -Wcast-qual -Wpointer-arith -Wcast-align -pedantic" fi ############################################################################## # Checks for libraries: ############################################################################## AC_ARG_WITH(efence, [AC_HELP_STRING([--with-efence],[use ElectricFence library])], ok=$withval, ok=no) if test "$ok" = "yes"; then AC_CHECK_LIB(efence, malloc) fi ############################################################################## AC_CHECK_LIB(m, sqrt) # If we have a Fortran compiler, link to its libraries, since these # are probably needed to link with the BLAS/LAPACK libraries. if test x != x"$F77"; then AC_F77_LIBRARY_LDFLAGS AC_F77_WRAPPERS fi ############################################################################## # In principle, we should abort if some of the following libraries are # missing, or perhaps only compile some of the subdirectories. For now, # though, we do nothing (and wait for the compilation errors). ############################################################################## AC_ARG_WITH(mpi, [AC_HELP_STRING([--with-mpi],[enable MPI parallelization])], with_mpi=$withval, with_mpi=no) AC_ARG_WITH(fftw2, [AC_HELP_STRING([--with-fftw2],[prefer FFTW2 to FFTW3])], with_fftw2=$withval, with_fftw2=no) # Check for FFTW libraries fftw3_func=execute test "x$with_fftw2" = xyes && fftw3_func=notarealfunction # prefer FFTW2 if test "$enable_single" = "yes"; then AC_CHECK_LIB(fftw3f, fftwf_$fftw3_func, [], [ AC_CHECK_LIB(sfftw, fftw) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(srfftw, rfftw) fi]) elif test "$enable_long_double" = "yes"; then AC_CHECK_LIB(fftw3l, fftwl_$fftw3_func, [], [ AC_CHECK_LIB(xfftw, fftw) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(xrfftw, rfftw) fi]) else AC_CHECK_LIB(fftw3, fftw_$fftw3_func, [], [ AC_CHECK_LIB(dfftw, fftw) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(drfftw, rfftw) fi]) fi if test x = x"`echo $LIBS | egrep 'l[[dsx]]fftw|fftw3'`"; then AC_CHECK_LIB(fftw, fftw) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(rfftw, rfftw) fi fi if test x = x"`echo $LIBS | egrep 'l[[dsx]]*fftw'`"; then AC_MSG_ERROR([The FFTW libraries could not be found. Make sure FFTW is installed, and that LDFLAGS and CPPFLAGS are set appropriately if necessary.]) fi if test x"$inv_sym" = xyes; then if test x = x"`echo $LIBS | egrep 'l[[dsx]]*rfftw|lfftw3'`"; then AC_MSG_ERROR([The FFTW3 or RFFTW libraries, which are required to compile MPB with inversion symmetry, could not be found. These should have been installed as a part of FFTW.]) fi fi ############################################################################## # Check for OpenMP libraries AC_ARG_WITH(openmp, [AC_HELP_STRING([--with-openmp],[enable OpenMP parallelization])], with_omp=$withval, with_omp=no) if test "x$with_omp" = xyes; then AC_DEFINE([USE_OPENMP], [1], [Define to use OpenMP threading.]) AX_OPENMP([], [AC_MSG_ERROR([Could not find OpenMP flag; configure with --without-openmp])]) CFLAGS="$CFLAGS $OPENMP_CFLAGS" fftw_omp=yes if test "$enable_single" = "yes"; then AC_CHECK_LIB(fftw3f_omp, fftwf_init_threads, [], [fftw_omp=no]) elif test "$enable_long_double" = "yes"; then AC_CHECK_LIB(fftw3l_omp, fftwl_init_threads, [], [fftw_omp=no]) else AC_CHECK_LIB(fftw3_omp, fftw_init_threads, [], [fftw_omp=no]) fi if test $fftw_omp = no; then AC_MSG_ERROR([Could not find OpenMP FFTW3 library; configure with --without-openmp]) fi echo "*********************** OpenMP ***********************" fi ############################################################################## # Checks for BLAS and LAPACK libraries: AX_BLAS([], [AC_MSG_ERROR([BLAS was not found!])]) AX_LAPACK([], [AC_MSG_ERROR([LAPACK was not found!])]) LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" ############################################################################## # Check for MPI library if test "x$with_mpi" = "xyes"; then AX_MPI([], [AC_MSG_ERROR(could not find mpi library for --with-mpi)]) CC="$MPICC" LIBS="$MPILIBS $LIBS" # Make installed program mpb-mpi instead of mpb MPB_SUFFIX="${MPB_SUFFIX}_mpi" # Check for fftw_mpi library. if test "$enable_single" = "yes"; then AC_CHECK_LIB(fftw3f_mpi, fftwf_mpi_${fftw3_func}_dft, [], [ AC_CHECK_LIB(sfftw_mpi, fftwnd_mpi) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(srfftw_mpi, rfftwnd_mpi) fi]) elif test "$enable_long_double" = "yes"; then AC_CHECK_LIB(fftw3l_mpi, fftwl_mpi_${fftw3_func}_dft, [], [ AC_CHECK_LIB(xfftw_mpi, fftwnd_mpi) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(xrfftw_mpi, rfftwnd_mpi) fi]) else AC_CHECK_LIB(fftw3_mpi, fftw_mpi_${fftw3_func}_dft, [], [ AC_CHECK_LIB(dfftw_mpi, fftwnd_mpi) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(drfftw_mpi, rfftwnd_mpi) fi]) fi if test x = x"`echo $LIBS | egrep 'l[[ds]]fftw_mpi|lfftw3f_mpi|lfftw3l_mpi|lfftw3_mpi'`"; then AC_CHECK_LIB(fftw_mpi, fftwnd_mpi) if test x"$inv_sym" = xyes; then AC_CHECK_LIB(rfftw_mpi, rfftwnd_mpi) fi fi if test x = x"`echo $LIBS | egrep 'l[[ds]]*fftw_mpi|lfftw3f_mpi|lfftw3l_mpi|lfftw3_mpi'`"; then AC_MSG_ERROR([couldn't find fftw MPI library for --with-mpi]) fi if test x"$inv_sym" = xyes; then if test x = x"`echo $LIBS | egrep 'l[[ds]]*rfftw_mpi|lfftw3l_mpi|lfftw3f_mpi|lfftw3_mpi'`"; then AC_MSG_ERROR([couldn't find rfftw_mpi library for --with-mpi --with-inv-symmetry]) fi fi AC_DEFINE(HAVE_MPI,1,[Define if you have & link an MPI library.]) fi AM_CONDITIONAL(MPI, test "x$with_mpi" = "xyes") ############################################################################## # Check for HDF5 library AC_ARG_WITH(hdf5, [AC_HELP_STRING([--without-hdf5],[do not use HDF5 output])], ok=$withval, ok=yes) if test "$ok" = "yes"; then AC_CHECK_LIB(z,deflate, [],[AC_MSG_WARN([zlib is required for HDF5!])]) save_LIBS_0="$LIBS" # save, to check later if we found any library AC_CHECK_LIB(hdf5, H5Pcreate, [ AC_CHECK_HEADERS(hdf5.h, [LIBS="-lhdf5 $LIBS" AC_DEFINE(HAVE_HDF5,1,[Define if we have & link HDF5])])]) if test x"$save_LIBS_0" = x"$LIBS"; then AC_MSG_WARN([Couldn't find the HDF5 library!! Switching to --without-hdf5.]) fi if test x != x"$MPILIBS"; then AC_CHECK_FUNCS(H5Pset_mpi H5Pset_fapl_mpio) fi fi ############################################################################## # Check for Guile library and flags: AC_CHECK_PROG(guile_ok, guile, yes, no) if test x"$guile_ok" = xno; then AC_MSG_ERROR([could not find guile program; check your PATH]) fi AC_CHECK_PROG(GUILE_CONFIG, guile-config, guile-config, unknown) if test "x$GUILE_CONFIG" = "xunknown"; then AC_CHECK_LIB(readline, readline) AC_CHECK_LIB(dl, dlopen) AC_CHECK_LIB(guile-ltdl, scm_lt_dlinit, [], [AC_CHECK_LIB(ltdl, dlopen)]) AC_CHECK_LIB(guile, gh_eval_str, [], [AC_CHECK_LIB(guile, scm_eval_string, [], [AC_MSG_ERROR([linking to guile failed])])]) else CPPFLAGS="$CPPFLAGS `$GUILE_CONFIG compile`" LIBS="`$GUILE_CONFIG link` $LIBS" AC_MSG_CHECKING([if linking to guile works]) AC_TRY_LINK_FUNC(gh_enter, AC_MSG_RESULT(yes), [AC_TRY_LINK_FUNC(scm_boot_guile, AC_MSG_RESULT(yes), [AC_MSG_RESULT(no) AC_MSG_ERROR([guile-config is broken])])]) fi AC_CHECK_HEADERS([libguile.h guile/gh.h]) # Check how smob types work in this Guile version: AC_CHECK_FUNCS(scm_make_smob_type scm_array_get_handle scm_is_array) AC_MSG_CHECKING([for SCM_SMOB_PREDICATE]) AC_TRY_LINK([#if defined(HAVE_LIBGUILE_H) # include #else # include # include #endif], [int x; SCM_SMOB_PREDICATE(1,x);], ok=yes, ok=no) AC_MSG_RESULT($ok) if test $ok = yes; then AC_DEFINE(HAVE_SCM_SMOB_PREDICATE, 1, [define if we have SCM_SMOB_PREDICATE]) fi AC_MSG_CHECKING([for SCM_SMOB_DATA]) AC_TRY_LINK([#if defined(HAVE_LIBGUILE_H) # include #else # include # include #endif], [int x; SCM_SMOB_DATA(x);], ok=yes, ok=no) AC_MSG_RESULT($ok) if test $ok = yes; then AC_DEFINE(HAVE_SCM_SMOB_DATA, 1, [define if we have SCM_SMOB_DATA]) fi AC_MSG_CHECKING([for SCM_NEWSMOB]) AC_TRY_LINK([#if defined(HAVE_LIBGUILE_H) # include #else # include # include #endif], [int x; SCM_NEWSMOB(x,1,0);], ok=yes, ok=no) AC_MSG_RESULT($ok) if test $ok = yes; then AC_DEFINE(HAVE_SCM_NEWSMOB, 1, [define if we have SCM_NEWSMOB]) fi # Check how to activate Guile readline support: ACTIVATE_READLINE="" if test "x$cross_compiling" = xno; then AC_MSG_CHECKING(how to activate readline in Guile) ractivate="(use-modules (readline-activator)) (activate-readline)" if guile -c "$ractivate" > /dev/null 2>&1; then AC_MSG_RESULT(readline-activator) ACTIVATE_READLINE="$ractivate" else ractivate="(use-modules (ice-9 readline)) (activate-readline)" if guile -c "$ractivate" > /dev/null 2>&1; then AC_MSG_RESULT(ice-9 readline) ACTIVATE_READLINE="$ractivate" else AC_MSG_RESULT(cannot) ACTIVATE_READLINE="" fi fi fi AC_SUBST(ACTIVATE_READLINE) ############################################################################## # Check for libctl library and files AC_ARG_WITH(libctl, [AC_HELP_STRING([--with-libctl=],[specify libctl directory])], ok=$withval, ok=yes) if test "$ok" = "no"; then AC_MSG_ERROR([libctl is required and you may not disable it]) elif test "$ok" != "yes"; then LIBCTL_DIR="$ok" fi AC_MSG_CHECKING([for libctl dir]) if test x != x"$LIBCTL_DIR" -a ! -r "$LIBCTL_DIR/base/ctl.scm"; then LIBCTL_DIR="" fi if test x = x"$LIBCTL_DIR" -a -r /usr/local/share/libctl/base/ctl.scm; then LIBCTL_DIR="/usr/local/share/libctl" fi if test x = x"$LIBCTL_DIR" -a -r /usr/share/libctl3/base/ctl.scm; then LIBCTL_DIR="/usr/share/libctl3" fi if test x = x"$LIBCTL_DIR" -a -r /usr/share/libctl/base/ctl.scm; then LIBCTL_DIR="/usr/share/libctl" fi if test x = x"$LIBCTL_DIR"; then AC_MSG_ERROR([could not find libctl files; use --with-libctl=]) fi AC_MSG_RESULT($LIBCTL_DIR) AC_SUBST(LIBCTL_DIR) AC_CHECK_PROGS(GEN_CTL_IO, gen-ctl-io, echo) if test x"$GEN_CTL_IO" = xecho; then AC_MSG_ERROR([could not find gen-ctl-io program; check your PATH]) fi # check for -lctl: AC_CHECK_LIB(ctl, ctl_get_vector3, [], [AC_MSG_ERROR([Couldn't find the required libctl library.])]) # check for ctl.h (Fedora puts it in /usr/include/ctl, grrr) CTL_H_CPPFLAG="" AC_CHECK_HEADER(ctl.h, [CTL_H_CPPFLAG=" "], [ save_CPPFLAGS=$CPPFLAGS AC_MSG_CHECKING([for alternate ctl.h location]) for ctl_h_path in /usr/include/ctl /usr/local/include/ctl; do CPPFLAGS="$save_CPPFLAGS -I$ctl_h_path" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]],[])], [CTL_H_CPPFLAG=-I$ctl_h_path; break]) done AC_MSG_RESULT([$CTL_H_CPPFLAG]) CPPFLAGS=$save_CPPFLAGS]) if test "x$CTL_H_CPPFLAG" = "x"; then AC_MSG_ERROR([Couldn't find the ctl.h header file for libctl.]) fi AC_SUBST(CTL_H_CPPFLAG) # Check libctl version >= LIBCTL_MAJOR.LIBCTL_MINOR.LIBCTL_BUGFIX LIBCTL_MAJOR=3; LIBCTL_MINOR=2; LIBCTL_BUGFIX=1 AC_MSG_CHECKING([whether libctl version is at least ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX}]) AC_EGREP_CPP(yes, [[ #include #if LIBCTL_MAJOR_VERSION > $LIBCTL_MAJOR || (LIBCTL_MAJOR_VERSION == $LIBCTL_MAJOR && (LIBCTL_MINOR_VERSION > $LIBCTL_MINOR || (LIBCTL_MINOR_VERSION == $LIBCTL_MINOR && LIBCTL_BUGFIX_VERSION >= $LIBCTL_BUGFIX))) yes #endif ]], [AC_MSG_RESULT(ok)], [AC_MSG_ERROR([libctl version ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX} or later is required])]) # Check for libctl_quiet feature (in libctl 3.1.1 or later): AC_MSG_CHECKING([for libctl_quiet feature]) if grep libctl_quiet "$LIBCTL_DIR/base/main.c" 2>&1 > /dev/null; then AC_MSG_RESULT(yes) AC_DEFINE([HAVE_LIBCTL_QUIET], [1], [If we have the libctl_quiet variable]) else AC_MSG_RESULT(no) fi # On IRIX, basename/dirname functions in libctl/main.c require -lgen AC_CHECK_LIB(gen, basename) ############################################################################## # check for nlopt library AC_CHECK_HEADERS(nlopt.h) NLOPT_LIB="" AC_CHECK_LIB(nlopt, nlopt_minimize, [AC_DEFINE(HAVE_NLOPT,[1],[Have nlopt lib]) NLOPT_LIB="-lnlopt"]) AC_SUBST(NLOPT_LIB) ############################################################################## # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h getopt.h nlopt.h) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE # Checks for library functions. AC_CHECK_FUNCS(getopt strncmp) ############################################################################## # Check to see if calling Fortran functions (in particular, the BLAS # complex dot product functions) works from C: AC_MSG_CHECKING([whether calling BLAS zdotc works]) AC_F77_FUNC(zdotc) AC_TRY_RUN([ #include #include typedef struct { double re, im; } cmplx; #ifdef __cplusplus extern "C" #endif extern cmplx $zdotc(int *, cmplx *, int *, cmplx *, int *); int main(void) { cmplx x[2] = { {1,0}, {0,1} }, y[2] = { {1,0}, {1,0} }; int n = 2, inc1 = 1, inc2 = 1; cmplx result = { 0, 0 }; result = $zdotc(&n, x, &inc1, y, &inc2); if (result.re != 1 || result.im != -1) return EXIT_FAILURE; else return EXIT_SUCCESS; } ], ok="yes", ok="no", ok="no") AC_MSG_RESULT($ok) if test "$ok" = "no"; then AC_DEFINE(NO_FORTRAN_FUNCTIONS,1,[Define if calling Fortran functions directly doesn't work.]) fi ############################################################################## # grab the various EIGS_ flags from eigensolver.h and substitute them # into mpb.scm.in (are not regular expressions fun?): # (note that autoconf gets unhappy if we have newlines; we must delete them) EIGS_FLAGS_SCM=`grep '#define EIGS_' $srcdir/src/matrices/eigensolver.h |sed 's/#define \([A-Za-z0-9_]*\) (1<<\([0-9]*\))/(define \1 (pow2 \2))/' |sed 's/#define \([A-Za-z0-9_]*\) (\(.*\))/(define \1 (+ \2))/' |sed 's/ *| */ /g' | tr -d '\n'` AC_SUBST(EIGS_FLAGS_SCM) ############################################################################## # Find a shell that supports job control, for mpb-split: AC_PATH_PROG(SH_JOB, bash ksh ash, sh) if test x"$SH_JOB" = xsh; then AC_MSG_WARN([Couldn't find bash or ksh shell on your system. The mpb-split command may not work if your sh doesn't support job control.]) fi ############################################################################## # The following function is used only for debugging. Note that # we must test for it *after* setting the compiler flags (which # affect whether it is declared, as it is a GNU extension). # We need to #include because that somehow affects whether # the function is declared with older gcc versions. We need # to use AC_TRY_COMPILE because the test in AC_HAVE_DECL seems # to be optimized out. AC_CHECK_FUNCS(feenableexcept) dnl GNU libc fp exception control function AC_MSG_CHECKING([whether feenableexcept declaration is usable]) feenableexcept_decl_ok=yes AC_TRY_COMPILE([#include #define _GNU_SOURCE 1 #include ], [feenableexcept(0);], [AC_DEFINE([HAVE_DECL_FEENABLEEXCEPT],[1],[Define if fenv.h declares this.])], [feenableexcept_decl_ok=no]) AC_MSG_RESULT($feenableexcept_decl_ok) ############################################################################## AC_SUBST(MPB_SUFFIX) program_transform_name="s,_,-,g;$program_transform_name" ############################################################################## AC_CONFIG_FILES([ Makefile examples/Makefile tests/Makefile src/Makefile src/util/Makefile src/matrices/Makefile src/matrixio/Makefile src/maxwell/Makefile mpb/Makefile mpb/mpb.scm mpb/mpb-split-preinstall utils/Makefile ]) # meb/Makefile # meb/meb.scm # meb/meb-split-preinstall AC_OUTPUT mpb-1.5/m4/0000755000175400001440000000000012315337026007460 500000000000000mpb-1.5/m4/ax_lapack.m40000644000175400001440000001166012315326212011564 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lapack.html # =========================================================================== # # SYNOPSIS # # AX_LAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the LAPACK linear-algebra # interface (see http://www.netlib.org/lapack/). On success, it sets the # LAPACK_LIBS output variable to hold the requisite library linkages. # # To link with LAPACK, you should link with: # # $LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS # # in that order. BLAS_LIBS is the output variable of the AX_BLAS macro, # called automatically. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # The user may also use --with-lapack= in order to use some specific # LAPACK library . In order to link successfully, however, be aware # that you will probably need to use the same Fortran compiler (which can # be set via the F77 env. var.) as was used to compile the LAPACK and BLAS # libraries. # # ACTION-IF-FOUND is a list of shell commands to run if a LAPACK library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_LAPACK. # # LICENSE # # Copyright (c) 2009 Steven G. Johnson # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AU_ALIAS([ACX_LAPACK], [AX_LAPACK]) AC_DEFUN([AX_LAPACK], [ AC_REQUIRE([AX_BLAS]) ax_lapack_ok=no AC_ARG_WITH(lapack, [AS_HELP_STRING([--with-lapack=], [use LAPACK library ])]) case $with_lapack in yes | "") ;; no) ax_lapack_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; *) LAPACK_LIBS="-l$with_lapack" ;; esac # Get fortran linker name of LAPACK function to check for. AC_F77_FUNC(cheev) # We cannot use LAPACK if BLAS is not found if test "x$ax_blas_ok" != xyes; then ax_lapack_ok=noblas LAPACK_LIBS="" fi # First, check LAPACK_LIBS environment variable if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS]) AC_TRY_LINK_FUNC($cheev, [ax_lapack_ok=yes], [LAPACK_LIBS=""]) AC_MSG_RESULT($ax_lapack_ok) LIBS="$save_LIBS" if test $ax_lapack_ok = no; then LAPACK_LIBS="" fi fi # LAPACK linked to by default? (is sometimes included in BLAS lib) if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" AC_CHECK_FUNC($cheev, [ax_lapack_ok=yes]) LIBS="$save_LIBS" fi # Generic LAPACK library? for lapack in lapack lapack_rs6k; do if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_CHECK_LIB($lapack, $cheev, [ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack"], [], [$FLIBS]) LIBS="$save_LIBS" fi done AC_SUBST(LAPACK_LIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_lapack_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_LAPACK,1,[Define if you have LAPACK library.]),[$1]) : else ax_lapack_ok=no $2 fi ])dnl AX_LAPACK mpb-1.5/m4/lt~obsolete.m40000644000000000000620000001375612235234705012207 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) mpb-1.5/m4/ax_blas.m40000644000175400001440000001550512315326212011254 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_blas.html # =========================================================================== # # SYNOPSIS # # AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the BLAS linear-algebra # interface (see http://www.netlib.org/blas/). On success, it sets the # BLAS_LIBS output variable to hold the requisite library linkages. # # To link with BLAS, you should link with: # # $BLAS_LIBS $LIBS $FLIBS # # in that order. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # Many libraries are searched for, from ATLAS to CXML to ESSL. The user # may also use --with-blas= in order to use some specific BLAS # library . In order to link successfully, however, be aware that you # will probably need to use the same Fortran compiler (which can be set # via the F77 env. var.) as was used to compile the BLAS library. # # ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is # not found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_BLAS. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 12 AU_ALIAS([ACX_BLAS], [AX_BLAS]) AC_DEFUN([AX_BLAS], [ AC_PREREQ(2.50) AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) ax_blas_ok=no AC_ARG_WITH(blas, [AS_HELP_STRING([--with-blas=], [use BLAS library ])]) case $with_blas in yes | "") ;; no) ax_blas_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; *) BLAS_LIBS="-l$with_blas" ;; esac # Get fortran linker names of BLAS functions to check for. AC_F77_FUNC(sgemm) AC_F77_FUNC(dgemm) ax_blas_save_LIBS="$LIBS" LIBS="$LIBS $FLIBS" # First, check BLAS_LIBS environment variable if test $ax_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi fi # BLAS linked to by default? (happens on some supercomputers) if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS" AC_MSG_CHECKING([if $sgemm is being linked in already]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/) if test $ax_blas_ok = no; then AC_CHECK_LIB(openblas, $sgemm, [ax_blas_ok=yes BLAS_LIBS="-lopenblas"]) fi # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) if test $ax_blas_ok = no; then AC_CHECK_LIB(atlas, ATL_xerbla, [AC_CHECK_LIB(f77blas, $sgemm, [AC_CHECK_LIB(cblas, cblas_dgemm, [ax_blas_ok=yes BLAS_LIBS="-lcblas -lf77blas -latlas"], [], [-lf77blas -latlas])], [], [-latlas])]) fi # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(dgemm, $dgemm, [AC_CHECK_LIB(sgemm, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], [], [-lblas])], [], [-lblas])]) fi # BLAS in Intel MKL library? if test $ax_blas_ok = no; then AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread]) fi # BLAS in Apple vecLib library? if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" AC_MSG_CHECKING([for $sgemm in -framework vecLib]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in Alpha CXML library? if test $ax_blas_ok = no; then AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"]) fi # BLAS in Alpha DXML library? (now called CXML, see above) if test $ax_blas_ok = no; then AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"]) fi # BLAS in Sun Performance library? if test $ax_blas_ok = no; then if test "x$GCC" != xyes; then # only works with Sun CC AC_CHECK_LIB(sunmath, acosp, [AC_CHECK_LIB(sunperf, $sgemm, [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" ax_blas_ok=yes],[],[-lsunmath])]) fi fi # BLAS in SCSL library? (SGI/Cray Scientific Library) if test $ax_blas_ok = no; then AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"]) fi # BLAS in SGIMATH library? if test $ax_blas_ok = no; then AC_CHECK_LIB(complib.sgimath, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) fi # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(essl, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], [], [-lblas $FLIBS])]) fi # Generic BLAS library? if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"]) fi AC_SUBST(BLAS_LIBS) LIBS="$ax_blas_save_LIBS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_blas_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1]) : else ax_blas_ok=no $2 fi ])dnl AX_BLAS mpb-1.5/m4/ltsugar.m40000644000000000000620000001042412235234705011303 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) mpb-1.5/m4/ax_mpi.m40000644000175400001440000001463112315326212011117 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_mpi.html # =========================================================================== # # SYNOPSIS # # AX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro tries to find out how to compile programs that use MPI # (Message Passing Interface), a standard API for parallel process # communication (see http://www-unix.mcs.anl.gov/mpi/) # # On success, it sets the MPICC, MPICXX, MPIF77, or MPIFC output variable # to the name of the MPI compiler, depending upon the current language. # (This may just be $CC/$CXX/$F77/$FC, but is more often something like # mpicc/mpiCC/mpif77/mpif90.) It also sets MPILIBS to any libraries that # are needed for linking MPI (e.g. -lmpi or -lfmpi, if a special # MPICC/MPICXX/MPIF77/MPIFC was not found). # # Note that this macro should be used only if you just have a few source # files that need to be compiled using MPI. In particular, you should # neither overwrite CC/CXX/F77/FC with the values of # MPICC/MPICXX/MPIF77/MPIFC, nor assume that you can use the same flags # etc. as the standard compilers. If you want to compile a whole program # using the MPI compiler commands, use one of the macros # AX_PROG_{CC,CXX,FC}_MPI. # # ACTION-IF-FOUND is a list of shell commands to run if an MPI library is # found, and ACTION-IF-NOT-FOUND is a list of commands to run if it is not # found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_MPI. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2008 Julian C. Cummings # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 8 AU_ALIAS([ACX_MPI], [AX_MPI]) AC_DEFUN([AX_MPI], [ AC_PREREQ(2.50) dnl for AC_LANG_CASE AC_LANG_CASE([C], [ AC_REQUIRE([AC_PROG_CC]) AC_ARG_VAR(MPICC,[MPI C compiler command]) AC_CHECK_PROGS(MPICC, mpicc hcc mpxlc_r mpxlc mpcc cmpicc, $CC) ax_mpi_save_CC="$CC" CC="$MPICC" AC_SUBST(MPICC) ], [C++], [ AC_REQUIRE([AC_PROG_CXX]) AC_ARG_VAR(MPICXX,[MPI C++ compiler command]) AC_CHECK_PROGS(MPICXX, mpic++ mpicxx mpiCC hcp mpxlC_r mpxlC mpCC cmpic++, $CXX) ax_mpi_save_CXX="$CXX" CXX="$MPICXX" AC_SUBST(MPICXX) ], [Fortran 77], [ AC_REQUIRE([AC_PROG_F77]) AC_ARG_VAR(MPIF77,[MPI Fortran 77 compiler command]) AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf_r mpxlf mpf77 cmpifc, $F77) ax_mpi_save_F77="$F77" F77="$MPIF77" AC_SUBST(MPIF77) ], [Fortran], [ AC_REQUIRE([AC_PROG_FC]) AC_ARG_VAR(MPIFC,[MPI Fortran compiler command]) AC_CHECK_PROGS(MPIFC, mpif90 mpxlf95_r mpxlf90_r mpxlf95 mpxlf90 mpf90 cmpif90c, $FC) ax_mpi_save_FC="$FC" FC="$MPIFC" AC_SUBST(MPIFC) ]) if test x = x"$MPILIBS"; then AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [Fortran 77], [AC_MSG_CHECKING([for MPI_Init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])], [Fortran], [AC_MSG_CHECKING([for MPI_Init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])]) fi AC_LANG_CASE([Fortran 77], [ if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"]) fi ], [Fortran], [ if test x = x"$MPILIBS"; then AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpichf90, MPI_Init, [MPILIBS="-lmpichf90"]) fi ]) if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"]) fi if test x = x"$MPILIBS"; then AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"]) fi dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the dnl latter uses $CPP, not $CC (which may be mpicc). AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [C++], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [Fortran 77], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpif.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi], [Fortran], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpif.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)]) fi]) AC_LANG_CASE([C], [CC="$ax_mpi_save_CC"], [C++], [CXX="$ax_mpi_save_CXX"], [Fortran 77], [F77="$ax_mpi_save_F77"], [Fortran], [FC="$ax_mpi_save_FC"]) AC_SUBST(MPILIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then $2 : else ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1]) : fi ])dnl AX_MPI mpb-1.5/m4/libtool.m40000644000000000000620000105721612235234705011301 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS mpb-1.5/m4/ltoptions.m40000644000000000000620000003007312235234705011657 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) mpb-1.5/m4/ax_openmp.m40000644000175400001440000001027412315326212011627 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_openmp.html # =========================================================================== # # SYNOPSIS # # AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro tries to find out how to compile programs that use OpenMP a # standard API and set of compiler directives for parallel programming # (see http://www-unix.mcs/) # # On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS # output variable to the flag (e.g. -omp) used both to compile *and* link # OpenMP programs in the current language. # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. # # If you want to compile everything with OpenMP, you should set: # # CFLAGS="$CFLAGS $OPENMP_CFLAGS" # #OR# CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" # #OR# FFLAGS="$FFLAGS $OPENMP_FFLAGS" # # (depending on the selected language). # # The user can override the default choice by setting the corresponding # environment variable (e.g. OPENMP_CFLAGS). # # ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is # not found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_OPENMP. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 8 AC_DEFUN([AX_OPENMP], [ AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown # Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI), # -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none" if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags" fi for ax_openmp_flag in $ax_openmp_flags; do case $ax_openmp_flag in none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;; *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;; esac AC_TRY_LINK_FUNC(omp_set_num_threads, [ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break]) done []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS ]) if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then m4_default([$2],:) else if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp fi m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])]) fi ])dnl AX_OPENMP mpb-1.5/m4/ltversion.m40000644000000000000620000000126212235234705011647 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) mpb-1.5/config.sub0000755000175400001440000010530112235234727011050 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-04-24' # This file 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 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: mpb-1.5/examples/0000755000175400001440000000000012315341511010750 500000000000000mpb-1.5/examples/Makefile.am0000644000175400001440000000030212315326146012726 00000000000000EXTRA_DIST = bragg.ctl bragg-sine.ctl check.ctl diamond.ctl dos.scm \ hole-slab.ctl honey-rods.ctl line-defect.ctl sq-rods.ctl strip.ctl \ tri-holes.ctl tri-rods.ctl tutorial.ctl wavevector.scm mpb-1.5/examples/strip.ctl0000644000175400001440000000565012315326111012542 00000000000000; Compute modes of a rectangular Si strip waveguide on top of oxide. ; Note that you should only pay attention, here, to the guided modes, ; which are the modes whose frequency falls under the light line -- ; that is, frequency < beta / 1.45, where 1.45 is the SiO2 index. ; Since there's no special lengthscale here, I'll just ; use microns. In general, if you use units of x, the frequencies ; output are equivalent to x/lambda; so here, the freqeuncies will be ; output as um/lambda, e.g. 1.5um would correspond to the frequency ; 1/1.5 = 0.6667. ; define parameters which can easily be changed on the command-line ; (e.g.: mpb w=0.5 buried-strip.ctl) (define-param w 0.3) ; Si width (um) (define-param h 0.25) ; Si height (um) (define Si (make dielectric (index 3.45))) (define SiO2 (make dielectric (index 1.45))) ; Define the computational cell. We'll make x the propagation direction. ; the other cell sizes should be big enough so that the boundaries are ; far away from the mode field. (define-param sc-y 2) ; supercell width (um) (define-param sc-z 2) ; supercell height (um) (set! geometry-lattice (make lattice (size no-size sc-y sc-z))) ; define the 2d blocks for the strip and substrate (set! geometry (list (make block (size infinity infinity (* 0.5 (- sc-z h))) (center 0 0 (* 0.25 (+ sc-z h))) (material SiO2)) (make block (size infinity w h) (center 0 0 0) (material Si)))) ; The k (i.e. beta, i.e. propagation constant) points to look at, in ; units of 2*pi/um. We'll look at num-k points from k-min to k-max. (define-param num-k 9) (define-param k-min 0.1) (define-param k-max 3.0) (set! k-points (interpolate num-k (list (vector3 k-min) (vector3 k-max)))) (set-param! resolution 32) ; pixels/um ; Increase this to see more modes. (The guided ones are the ones below the ; light line, i.e. those with frequencies < kmag / 1.45, where kmag ; is the corresponding column in the output if you grep for "freqs:".) (set-param! num-bands 4) (set-param! filename-prefix "strip-") ; use this prefix for output files ; compute num-bands lowest frequencies as a function of k. Also display ; "parities", i.e. whether the mode is symmetric or anti-symmetric ; through the y=0 and z=0 planes. (run display-yparities display-zparities) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Above, we outputted the dispersion relation: frequency (omega) as a ; function of wavevector kx (beta). Alternatively, you can compute ; beta for a given omega -- for example, you might want to find the ; modes and wavevectors at a fixed wavelength of 1.55 microns. You ; can do that using the find-k function: (define-param omega (/ 1 1.55)) ; frequency corresponding to 1.55um ; Output the x component of the Poynting vector for num-bands bands at omega (find-k NO-PARITY omega 1 num-bands (vector3 1) 1e-3 (* omega 3.45) (* omega 0.1) (* omega 4) output-poynting-x display-yparities display-group-velocities) mpb-1.5/examples/tri-holes.ctl0000644000175400001440000000250612315325762013317 00000000000000; 2d system: triangular lattice of air holes in dielectric ; This structure has a complete band gap (i.e. a gap in both TE and TM ; simultaneously) for a hole radius of 0.45a and a dielectric constant of ; 12. (See, e.g., the book "Photonic Crystals" by Joannopoulos et al.) ; first, define the lattice vectors and k-points for a triangular lattice: (set! geometry-lattice (make lattice (size 1 1 no-size) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5))) (define-param kz 0) ; use non-zero kz to consider vertical propagation (set! k-points (list (vector3 0 0 kz) ; Gamma (vector3 0 0.5 kz) ; M (vector3 (/ -3) (/ 3) kz) ; K (vector3 0 0 kz))) ; Gamma (define-param k-interp 4) (set! k-points (interpolate k-interp k-points)) ; Now, define the geometry, etcetera: (define-param eps 12) ; the dielectric constant of the background (define-param r 0.45) ; the hole radius (set! default-material (make dielectric (epsilon eps))) (set! geometry (list (make cylinder (center 0) (material air) (radius r) (height infinity)))) (set-param! resolution 32) (set-param! num-bands 8) (if (= kz 0) (begin (run-te) (run-tm)) (run)) ; if kz != 0 there are no purely te and tm bands mpb-1.5/examples/tutorial.ctl0000644000175400001440000001171212315325622013246 00000000000000; This file contains the Scheme commands from the user tutorial section ; of the manual. It is meant to be run interactively by the user. ; *** Our First Band Structure *** (print "********** Square lattice of rods in air **********\n") (set! num-bands 8) (set! k-points (list (vector3 0 0 0) ; Gamma (vector3 0.5 0 0) ; X (vector3 0.5 0.5 0) ; M (vector3 0 0 0))) ; Gamma (set! k-points (interpolate 4 k-points)) (set! geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon 12)))))) (set! geometry-lattice (make lattice (size 1 1 no-size))) (set! resolution 32) (print "********** Square lattice of rods: TE bands**********\n") (run-te) (print "********** Square lattice of rods: TM bands **********\n") (run-tm) (print "********** Square lattice of rods: TM, w/efield **********\n") (run-tm output-efield-z) (print "********** Square lattice of rods: TE, w/hfield & dpwr **********\n") (run-te (output-at-kpoint (vector3 0.5 0 0) output-hfield-z output-dpwr)) ; *** Bands of a Triangular Lattice *** (print "********** Triangular lattice of rods in air **********\n") (set! geometry-lattice (make lattice (size 1 1 no-size) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5))) (set! k-points (list (vector3 0 0 0) ; Gamma (vector3 0 0.5 0) ; M (vector3 (/ -3) (/ 3) 0) ; K (vector3 0 0 0))) ; Gamma (set! k-points (interpolate 4 k-points)) (run-tm) ; *** Maximizing the First TM Gap *** (print "********** Maximizing the first TM gap **********\n") (define (first-tm-gap r) (set! geometry (list (make cylinder (center 0 0 0) (radius r) (height infinity) (material (make dielectric (epsilon 12)))))) (run-tm) (retrieve-gap 1)) ; return the gap from TM band 1 to TM band 2 (set! num-bands 2) (set! mesh-size 7) ; increase from default value of 3 (define result (maximize first-tm-gap 0.1 0.1 0.5)) (print "radius at maximum: " (max-arg result) "\n") (print "gap size at maximum: " (max-val result) "\n") (set! mesh-size 3) ; reset to default value of 3 ; *** A Complete 2D Gap with an Anisotropic Dielectric *** (print "********** Anisotropic complete 2d gap **********\n") (set! geometry (list (make cylinder (center 0 0 0) (radius 0.3) (height infinity) (material (make dielectric-anisotropic (epsilon-diag 1 1 12)))))) (set! default-material (make dielectric-anisotropic (epsilon-diag 12 12 1))) (set! num-bands 8) (run) ; just use run, instead of run-te or run-tm, to find the complete gap ; *** Finding a Point-defect State *** (print "********** 5x5 point defect **********\n") (set! geometry-lattice (make lattice (size 5 5 no-size))) (set! geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon 12)))))) (set! geometry (geometric-objects-lattice-duplicates geometry)) (set! geometry (append geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material air))))) (set! resolution 16) (set! k-points (list (vector3 0.5 0.5 0))) (set! num-bands 50) (run-tm) (output-efield-z 25) (get-dfield 25) ; compute the D field for band 25 (compute-field-energy) ; compute the energy density from D (print "energy in cylinder: " (compute-energy-in-objects (make cylinder (center 0 0 0) (radius 1.0) (height infinity) (material air))) "\n") (print "********** 5x5 point defect, targeted solver **********\n") (set! num-bands 1) ; only need to compute a single band, now! (set! target-freq (/ (+ 0.2812 0.4174) 2)) (set! tolerance 1e-8) (run-tm) ; *** Tuning the Point-defect Mode *** (print "********** Tuning the 5x5 point defect **********\n") (define old-geometry geometry) ; save the 5x5 grid with a missing rod (define (rootfun eps) ; add the cylinder of epsilon = eps to the old geometry: (set! geometry (append old-geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon eps))))))) (run-tm) ; solve for the mode (using the targeted solver) (print "epsilon = " eps " gives freq. = " (list-ref freqs 0) "\n") (- (list-ref freqs 0) 0.314159)) ; return 1st band freq. - 0.314159 (define rooteps (find-root rootfun 0.01 1 12)) (print "root (value of epsilon) is at: " rooteps "\n") (define rootval (rootfun rooteps)) (print "root function at " rooteps " = " rootval "\n") mpb-1.5/examples/wavevector.scm0000644000175400001440000000213312315326112013560 00000000000000; Code to output the data needed for a wavevector diagram at a grid of ; k points, suitable for plotting with a contour-plot program. (define (kgrid kx-min kx-max ky-min ky-max nkx nky) (map (lambda (kx) (interpolate nky (list (vector3 kx ky-min) (vector3 kx ky-max)))) (interpolate nkx (list kx-min kx-max)))) ; output a bunch of lines of the form: ; kgrid:, band#, kx, frequencies at kys... ; Frequencies above the light cone omega > c |k| / n-lightcone are ; excluded (multiplied by -1); set n-lightcone = 0 to disable this. (define (wavevector-diagram kgrid parity n-lightcone) (map (lambda (kylist) (set! k-points kylist) (run-parity parity true) (map (lambda (band) (print "kgrid:, " band ", " (vector3-x (car kylist))) (map (lambda (freqs k) (print ", " (* (if (and (positive? n-lightcone) (> (list-ref freqs (- band 1)) (* n-lightcone (vector3-norm (reciprocal->cartesian k))))) -1 1) (list-ref freqs (- band 1))))) all-freqs k-points) (print "\n")) (arith-sequence 1 1 num-bands))) kgrid)) mpb-1.5/examples/line-defect.ctl0000644000175400001440000000371512315325622013566 00000000000000; A line-defect waveguide in a 2d triangular lattice of dielectric ; rods (c.f. tri-rods.ctl), formed by a row of missing rods along the ; "x" direction. (Here, "x" and "y" refer to the first and second ; basis directions.) This structure supports a single guided band ; within the band gap, much like the analogous waveguide in a square ; lattice of rods (see "Photonic Crystals" by Joannopoulos et al.). (define-param supercell-y 7) ; the (odd) number of lateral supercell periods (set! geometry-lattice (make lattice (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5) (size 1 supercell-y no-size))) (define-param eps 12) ; the dielectric constant of the rods (define-param r 0.2) ; the rod radius in the bulk crystal (set! geometry (list (make cylinder (center 0 0 0) (radius r) (height infinity) (material (make dielectric (epsilon eps)))))) (set! geometry (append ; duplicate the bulk crystal rods over the supercell: (geometric-objects-lattice-duplicates geometry) ; add a rod of air, to erase a row of rods and form a waveguide: (list (make cylinder (center 0) (radius r) (height infinity) (material air))))) (define Gamma (vector3 0 0 0)) (define K' (lattice->reciprocal (vector3 0.5 0 0))) ; edge of Brillouin zone. (set! k-points (interpolate 4 (list Gamma K'))) ; the bigger the supercell, the more bands you need to compute to get ; to the defect modes (the lowest band is "folded" supercell-y times): (define-param extra-bands 5) ; number of extra bands to compute above the gap (set! num-bands (+ supercell-y extra-bands)) (set-param! resolution 32) ; Compute the TM modes, outputting the Ez field in the *middle* of the ; band. (In general, the guided mode in such an air defect may have ; exited the gap by the time it reaches the edge of the Brillouin ; zone at K'.) (run-tm (output-at-kpoint (list-ref k-points (quotient (length k-points) 2)) fix-efield-phase output-efield-z)) mpb-1.5/examples/check.ctl0000644000175400001440000004315212315326210012455 00000000000000; Test suite for MPB. This file runs MPB for a variety of cases, ; and compares it against known results from previous versions. If the ; answers aren't sufficiently close, it exits with an error. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Some general setup and utility routines first: (set! tolerance 1e-9) ; use a low tolerance to get consistent results ; keep track of some error statistics: (define min-err infinity) (define max-err 0) (define max-abs-err 0) (define sum-err 0) (define sum-abs-err 0) (define num-err 0) ; function to check if two results are sufficently close: (define-param check-tolerance 1e-4) (define (almost-equal? x y) (if (> (abs x) 1e-3) (let ((err (/ (abs (- x y)) (* 0.5 (+ (abs x) (abs y))))) (abserr (abs (- x y)))) (set! min-err (min min-err err)) (set! max-err (max max-err err)) (set! max-abs-err (max max-abs-err abserr)) (set! num-err (+ num-err 1)) (set! sum-err (+ sum-err err)) (set! sum-abs-err (+ sum-abs-err abserr)))) (or (< (abs (- x y)) (* 0.5 check-tolerance (+ (abs x) (abs y)))) (and (< (abs x) 1e-3) (< (abs (- x y)) 1e-3)))) ; Convert a list l into a list of indices '(1 2 ...) of the same length. (define (indices l) (if (null? l) '() (cons 1 (map (lambda (x) (+ x 1)) (indices (cdr l)))))) ; Check whether the freqs returned by a run (all-freqs) match correct-freqs. (define (check-freqs correct-freqs) (define (check-freqs-aux fc-list f-list ik) (define (check-freqs-aux2 fc f ib) (if (not (almost-equal? fc f)) (error "check-freqs: k-point " ik " band " ib " is " f " instead of " fc))) (if (= (length fc-list) (length f-list)) (map check-freqs-aux2 fc-list f-list (indices f-list)) (error "check-freqs: wrong number of bands at k-point " ik))) (if (= (length correct-freqs) (length all-freqs)) (begin (map check-freqs-aux correct-freqs all-freqs (indices all-freqs)) (print "check-freqs: PASSED\n")) (error "check-freqs: wrong number of k-points"))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (not (using-mpi?)) ; MPI code currently doesn't support 1d systems (begin ; Use a lower tolerance for the 1d cases, since it is cheap; otherwise, ; the Bragg-sine case perennially causes problems. (set! tolerance (/ tolerance 10000)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; First test: a simple 1d Bragg mirror: (print "**************************************************************************\n" " Test case: 1d quarter-wave stack.\n" "**************************************************************************\n" ) (set! geometry (list (make cylinder (material (make dielectric (epsilon 9.0))) (center 0) (axis 1) (radius infinity) (height 0.25)))) (set! k-points (interpolate 4 (list (vector3 0 0 0) (vector3 0.5 0 0)))) (set! grid-size (vector3 32 1 1)) (set! num-bands 8) (let ((correct-freqs '((0.0 0.666384282528928 0.666667518031881 1.33099337665679 1.33336087672839 1.99161980173015 2.00024302642565 2.6450937852083) (0.0574931097997446 0.608787973096119 0.724373977055668 1.2735966394103 1.39097797892597 1.93584941706027 2.05633589084836 2.59377005482918) (0.113352271592983 0.552761237115776 0.780756082813777 1.21672824612875 1.44856381682192 1.87756171149864 2.11568713317692 2.53392260905135) (0.164802158007456 0.501201811770545 0.832987385247272 1.16417795261225 1.50250265212664 1.82314371802974 2.17224997337128 2.47690271740002) (0.205536502065922 0.460405353660882 0.8747810869492 1.12220337812548 1.54664162749105 1.77873062187023 2.22033216569935 2.42854622021095) (0.22245099319197 0.443470718153721 0.89236781440248 1.10455805248897 1.56579373692671 1.75948932731251 2.24248043100853 2.40631190043537)))) (run-tm) (check-freqs correct-freqs) (run-te) (check-freqs correct-freqs)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Second test: a less-simple 1d Bragg mirror, consisting of a sinusoidally ; varying dielectric index (see also bragg-sine.ctl): (print "**************************************************************************\n" " Test case: 1d sinusoidal Bragg mirrors.\n" "**************************************************************************\n" ) (let ((pi (* 4 (atan 1)))) ; 3.14159... (define (eps-func p) (make dielectric (index (+ 2 (cos (* 2 pi (vector3-x p))))))) (set! default-material (make material-function (material-func eps-func)))) (set! k-points (interpolate 9 (list (vector3 0 0 0) (vector3 0.5 0 0)))) (set! grid-size (vector3 32 1 1)) (set! num-bands 8) (run-tm) (check-freqs '((0.0 0.460648275218079 0.542427739817 0.968586586361068 1.01617062660004 1.48337333794755 1.48386583676098 1.96763768634053) (0.0231424888788602 0.454293827620926 0.548894464606965 0.958360293771355 1.02641972845204 1.45913774058533 1.50811173706602 1.94948827608003) (0.0462090787082577 0.439084320039512 0.564452582533386 0.938267239403995 1.04658249131212 1.43467215953867 1.53260886786687 1.92547645623973) (0.0691102159040715 0.420015536860369 0.584144708540882 0.915749746086578 1.06922078451581 1.41022612312792 1.55710983305974 1.90110410737745) (0.0917238673443258 0.399480768741237 0.60565316278248 0.892483769139075 1.09266692571585 1.38580829656309 1.58161025389159 1.87664635327897) (0.113863114251085 0.378567678109852 0.628026307077094 0.868958449423545 1.11644695897109 1.3614327391061 1.60610415581645 1.85216493367767) (0.135212561098235 0.357979431767488 0.650804940461757 0.845399327507094 1.14036437789844 1.33712597279413 1.63058104368944 1.82768870377694) (0.155193837618337 0.338479349371984 0.673671347997618 0.822003372220962 1.16428444411062 1.31294698795159 1.65501798584125 1.80324819761608) (0.172679547014293 0.321289854992633 0.696193190997784 0.799137496016584 1.18800188305626 1.28906327514362 1.67934881274624 1.77891315965595) (0.185502873728775 0.308627942742938 0.717034417258616 0.778101847588796 1.21076249234602 1.26620930567935 1.70326114132094 1.75499775017206) (0.19041596916807 0.303766163770654 0.728590051056375 0.766483258741006 1.22530241888082 1.25163924613769 1.72099865592632 1.73725912578794))) (set! default-material air) ; don't screw up later tests ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (set! tolerance (* tolerance 10000)) )) ; if (not (using-mpi?)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Square lattice of dielectric rods in air. (print "**************************************************************************\n" " Test case: Square lattice of dielectric rods in air.\n" "**************************************************************************\n" ) (set! geometry (list (make cylinder (material (make dielectric (epsilon 11.56))) (center 0 0) (radius 0.2) (height infinity)))) (set! k-points (interpolate 4 (list (vector3 0) (vector3 0.5) (vector3 0.5 0.5 0) (vector3 0)))) (set! grid-size (vector3 32 32 1)) (set! num-bands 8) (run-te) (check-freqs '((0.0 0.561945334557385 0.780842812331228 0.780846098412592 0.924371683163949 1.00803985129792 1.00804088731802 1.09858623956652) (0.0897997798994076 0.560209896469707 0.767785350870472 0.782438231618754 0.912603067546361 1.00888633849104 1.00949114803277 1.12115474664388) (0.178852773321546 0.553300983639649 0.732522222968759 0.786672449175983 0.890463105855642 1.01385729138557 1.02078013833592 1.11300646463179) (0.266123594110195 0.534865350840295 0.689376138533469 0.792049548816113 0.872925911023147 1.02090314736827 1.04285404891473 1.10753383632769) (0.349588020537016 0.494779669995165 0.658508223213229 0.796523676734899 0.862683642813515 1.02898182530566 1.07043694197557 1.10003079693163) (0.413345586803412 0.44462291351553 0.648672217588454 0.798265471046059 0.859327463282679 1.03311041395003 1.09580214986717 1.09741680977047) (0.424298362126911 0.44898279373346 0.644548562548272 0.802551148059984 0.854853159661748 0.98983998591444 1.0583076027211 1.11679157683255) (0.455353836640927 0.461160511700901 0.633230253238328 0.814782424365419 0.834250744952672 0.934557961696952 1.01274334726807 1.12367050454956) (0.478427219924468 0.501912134249683 0.617449702512683 0.784489069111248 0.833710248078536 0.906540901997911 0.967733581444411 1.1263583529554) (0.495604528258234 0.556867480138193 0.601739184739058 0.720584183505631 0.858431813314025 0.897771643330533 0.92661062844362 1.12761853567986) (0.503605801531701 0.594344024613055 0.59435663953178 0.679388741318615 0.883664739567964 0.895781768469706 0.895786874556172 1.12801276576574) (0.474670773656218 0.549917137140298 0.608031881017845 0.745034531026827 0.848354751485403 0.895854164182374 0.945890643267912 1.12708247876502) (0.373253932819571 0.543225052446258 0.646250803261438 0.817389372081735 0.830457382271798 0.896516227567732 1.01760084433849 1.12197791661875) (0.252369333718973 0.551073128162047 0.700804337123788 0.797551602017551 0.899585769590366 0.903389586014203 1.08791421563576 1.10099000357684) (0.126940001741566 0.558853684776988 0.755651182474766 0.785047154907932 0.909884122992341 0.968812657472461 1.04813919691317 1.11332213355591) (0.0 0.561945334407731 0.780842812401179 0.780846098384021 0.924371683195103 1.00803985129514 1.00804088729554 1.09858622997793))) (run-tm) (check-freqs '((0.0 0.550336075492761 0.561337783494192 0.561339793996441 0.822948013585295 0.868841613389014 0.965325380929893 1.08937760109445) (0.0651416429431535 0.525003695654183 0.561884878000649 0.586306893982008 0.823535977020037 0.86734647097958 0.954632345309176 1.05687677175817) (0.127664746818747 0.493649813919317 0.563322581824471 0.617311826620811 0.822736862854134 0.863529964061771 0.92430556209052 1.03882168368046) (0.184046514295327 0.461592151644409 0.565121689802102 0.651396635807459 0.810838592407438 0.85898411247184 0.892949156581082 1.03589199660828) (0.227778015582534 0.433360712061513 0.566595731512458 0.689044651877333 0.778791875677485 0.855425103295414 0.879398204894174 1.0387432995892) (0.245808974576747 0.420657338406186 0.56716328782128 0.720091820469093 0.747202991063479 0.854090458576806 0.877011871859037 1.04079703189466) (0.249298773583017 0.427307623035431 0.560220797848635 0.718025037316212 0.756122437610169 0.855013330357386 0.877106455296421 1.02916965498279) (0.258693333199135 0.445540869703809 0.543385384840764 0.711697647242147 0.779350400764203 0.858135812263486 0.877357018542926 1.00092092539592) (0.270962613899996 0.470322466744217 0.524052873443864 0.701396122540261 0.810963308664218 0.864393838558208 0.877683037781189 0.965108093819696) (0.281613643862846 0.493207050642694 0.508823220586706 0.68996057277849 0.846784814196112 0.87459516255628 0.878068231243395 0.926580909129451) (0.285905779127161 0.502981364580489 0.502983097838737 0.684476386658726 0.874359380527121 0.883317372585053 0.883317410406254 0.892993349560143) (0.276088805107277 0.491352389673393 0.508683441988827 0.692579899252015 0.839723261134077 0.85643142702439 0.907218621287156 0.907347258076394) (0.240239034783233 0.479230170582085 0.523498859086802 0.685361670368096 0.829265933706741 0.840450969771508 0.910791381218572 0.941595252480836) (0.175240325825588 0.488533364028353 0.541560691215046 0.647509833455847 0.83001959727719 0.850443167942857 0.922657201444286 0.983924775906362) (0.0915258938978901 0.516393376876295 0.555923804221748 0.60121063231939 0.824561228580069 0.865290375816656 0.948411582724858 1.03526242687651) (0.0 0.550336075497221 0.561337783491839 0.561339793993807 0.822948013590914 0.868841613389918 0.965325380904055 1.08937790223254))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Using the targeted solver to find a defect state in a 5x5 triangular ; lattice of rods. (print "**************************************************************************\n" " Test case: 3x3 triangular lattice of rods in air, dipole defect states.\n" "**************************************************************************\n" ) (set! geometry-lattice (make lattice (size 3 3 1) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5))) (set! k-points (list (vector3 0 0.5 0))) ; K (set! geometry (list (make cylinder (material (make dielectric (epsilon 12))) (center 0 0) (radius 0.2) (height infinity)))) (set! geometry (geometric-objects-lattice-duplicates geometry)) (set! geometry (append geometry (list (make cylinder (center 0 0 0) (radius 0.33) (height infinity) (material (make dielectric (epsilon 12))))))) (set! grid-size (vector3 (* 16 5) (* 16 5) 1)) (set! num-bands 2) (set! target-freq 0.35) (run-tm) (define ct-save check-tolerance) (set! check-tolerance (* ct-save 10)) (check-freqs '((0.33627039929402 0.338821383601027))) (set! check-tolerance ct-save) (set! target-freq 0) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (print "**************************************************************************\n" " Test case: fcc lattice of air spheres in dielectric.\n" "**************************************************************************\n" ) (set! geometry-lattice (make lattice (basis1 0 1 1) (basis2 1 0 1) (basis3 1 1 0))) (set! k-points (interpolate 1 (list (vector3 0 0.5 0.5) ; X (vector3 0 0.625 0.375) ; U (vector3 0 0.5 0) ; L (vector3 0 0 0) ; Gamma (vector3 0 0.5 0.5) ; X (vector3 0.25 0.75 0.5) ; W (vector3 0.375 0.75 0.375)))) ; K (set! geometry (list (make sphere (center 0) (radius 0.5) (material air)))) (set! default-material (make dielectric (epsilon 11.56))) (set! grid-size (vector3 16 16 16)) (set! mesh-size 5) (set! num-bands 10) (run) (check-freqs '((0.368982508580386 0.370414874154296 0.38054839838165 0.381357051945723 0.491513720029372 0.51121392863688 0.521363342497417 0.522861193744798 0.592667676918319 0.661690514141366) (0.367020237266256 0.375797592625609 0.382773925549089 0.385461932700734 0.469710555381094 0.505345355926352 0.52281600926083 0.529848937216978 0.608024611885665 0.645331772905374) (0.356148094562699 0.378821717883782 0.391057032153736 0.399470971405211 0.437323856255036 0.493905903117348 0.526668553005108 0.539639058437665 0.63363930938116 0.640377586058671) (0.322331263143627 0.329883020473848 0.39633819564794 0.399292349978453 0.461110211027844 0.513251479625681 0.532637635779923 0.545141046814197 0.628477949553707 0.641406165032021) (0.306208216753111 0.30720983871744 0.386354358807912 0.387814801657265 0.489971009772797 0.535466222156093 0.536375504069675 0.538139640206077 0.621853815224684 0.625576237106134) (0.178859734457415 0.179320605610199 0.472011449233806 0.47415160932512 0.50199374441813 0.535090816560177 0.537373496001262 0.540138391993461 0.621420370144011 0.624472560227568) (0.0 0.0 0.517352332947689 0.520002862413723 0.52000998488147 0.543793108009828 0.543804563668257 0.54611949003285 0.609965221810339 0.610911592716707) (0.206171409773412 0.206578521564303 0.471831191008671 0.473583292330337 0.505015743288147 0.52608434561707 0.529675644154018 0.531247845312004 0.601961712578954 0.651911316476201) (0.368982508607754 0.370414874177744 0.38054839846607 0.381357051990387 0.491513720038249 0.511213928597604 0.521363342567513 0.522861193724753 0.5926676768892 0.661690566687818) (0.370855082942356 0.375535044990879 0.383957530115669 0.390387285130789 0.46143300060012 0.500837390758211 0.504196072793132 0.548295643991495 0.619261917910806 0.634962775719668) (0.372209234884998 0.384598603598355 0.384713321057366 0.407868853041212 0.433282510618956 0.489638974802283 0.491154274377333 0.566045188346111 0.623766417122018 0.651592170483669) (0.362554935689522 0.380879434108421 0.388519147314381 0.403695419934365 0.4364044517563 0.492285144668654 0.504428237945514 0.558399557280067 0.630652658823279 0.642705425888956) (0.357412643505187 0.378344354884614 0.389830616765953 0.400444783721239 0.436214944650087 0.493813244349865 0.528292157574522 0.540102363490965 0.635409833339297 0.641130580611554))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (print "**************************************************************************\n" " Test case: simple cubic lattice with anisotropic dielectric.\n" "**************************************************************************\n" ) (set! geometry-lattice (make lattice)) (set! default-material air) (set! k-points (list (vector3 0) (vector3 0.5) (vector3 0.5 0.5) (vector3 0.5 0.5 0.5))) (set! grid-size (vector3 16 16 16)) (set! mesh-size 5) (define hi-all (make dielectric (epsilon 12))) (define hi-x (make dielectric-anisotropic (epsilon-diag 12 1 1))) (define hi-y (make dielectric-anisotropic (epsilon-diag 1 12 1))) (define hi-z (make dielectric-anisotropic (epsilon-diag 1 1 12))) (set! geometry (list (make block (center 0) (size 0.313 0.313 1) (material hi-z)) (make block (center 0) (size 0.313 1 0.313) (material hi-y)) (make block (center 0) (size 1 0.313 0.313) (material hi-x)) (make block (center 0) (size 0.313 0.313 0.313) (material hi-all)))) (set! num-bands 3) (run) (check-freqs '((0.0 0.0 0.546634963647193) (0.259951207183097 0.259951258670471 0.444658075510584) (0.300692330235002 0.345673935773948 0.497692646240215) (0.362782432577119 0.362782474830613 0.502236936705387))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (display-eigensolver-stats) (print "Relative error ranged from " min-err " to " max-err ", with a mean of " (/ sum-err num-err) "\n") (print "Absolute error ranged to " max-abs-err ", with a mean of " (/ sum-abs-err num-err) "\n") (print "PASSED all tests.\n") mpb-1.5/examples/Makefile.in0000644000175400001440000003051512315337034012746 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = examples DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_mpi.m4 \ $(top_srcdir)/m4/ax_openmp.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/mpbconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACTIVATE_READLINE = @ACTIVATE_READLINE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CTL_H_CPPFLAG = @CTL_H_CPPFLAG@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EIGS_FLAGS_SCM = @EIGS_FLAGS_SCM@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FLIBS = @FLIBS@ GEN_CTL_IO = @GEN_CTL_IO@ GREP = @GREP@ GUILE_CONFIG = @GUILE_CONFIG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCTL_DIR = @LIBCTL_DIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPB_SUFFIX = @MPB_SUFFIX@ MPB_VERSION = @MPB_VERSION@ MPICC = @MPICC@ MPILIBS = @MPILIBS@ NLOPT_LIB = @NLOPT_LIB@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SCALAR_TYPE = @SCALAR_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ SH_JOB = @SH_JOB@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ guile_ok = @guile_ok@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = bragg.ctl bragg-sine.ctl check.ctl diamond.ctl dos.scm \ hole-slab.ctl honey-rods.ctl line-defect.ctl sq-rods.ctl strip.ctl \ tri-holes.ctl tri-rods.ctl tutorial.ctl wavevector.scm all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir 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 installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # 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: mpb-1.5/examples/diamond.ctl0000644000175400001440000000274612315325622013025 00000000000000; Dielectric spheres in a diamond (fcc) lattice. This file is used in ; the "Data Analysis Tutorial" section of the MPB manual. (set! geometry-lattice (make lattice (basis-size (sqrt 0.5) (sqrt 0.5) (sqrt 0.5)) (basis1 0 1 1) (basis2 1 0 1) (basis3 1 1 0))) ; Corners of the irreducible Brillouin zone for the fcc lattice, ; in a canonical order: (set! k-points (interpolate 4 (list (vector3 0 0.5 0.5) ; X (vector3 0 0.625 0.375) ; U (vector3 0 0.5 0) ; L (vector3 0 0 0) ; Gamma (vector3 0 0.5 0.5) ; X (vector3 0.25 0.75 0.5) ; W (vector3 0.375 0.75 0.375)))) ; K ; define a couple of parameters (which we can set from the command-line) (define-param eps 11.56) ; the dielectric constant of the spheres (define-param r 0.25) ; the radius of the spheres (define diel (make dielectric (epsilon eps))) ; A diamond lattice has two "atoms" per unit cell: (set! geometry (list (make sphere (center 0.125 0.125 0.125) (radius r) (material diel)) (make sphere (center -0.125 -0.125 -0.125) (radius r) (material diel)))) ; (A simple fcc lattice would have only one sphere/object at the origin.) (set-param! resolution 16) ; use a 16x16x16 grid (set-param! mesh-size 5) (set-param! num-bands 5) ; run calculation, outputting electric-field energy density at the U point: (run (output-at-kpoint (vector3 0 0.625 0.375) output-dpwr)) mpb-1.5/examples/honey-rods.ctl0000644000175400001440000000320712315325622013472 00000000000000; A honeycomb lattice of dielectric rods in air. (This structure has ; a complete (overlapping TE/TM) band gap.) A honeycomb lattice is really ; just a triangular lattice with two rods per unit cell, so we just ; take the lattice, k-points, etcetera from tri-rods.ctl. (define-param r 0.14) ; the rod radius (define-param eps 12) ; the rod dielectric constant ; triangular lattice: (set! geometry-lattice (make lattice (size 1 1 no-size) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5))) ; Two rods per unit cell, at the correct positions to form a honeycomb ; lattice, and arranged to have inversion symmetry: (set! geometry (list (make cylinder (center (/ 6) (/ 6) 0) (radius r) (height infinity) (material (make dielectric (epsilon eps)))) (make cylinder (center (/ -6) (/ -6) 0) (radius r) (height infinity) (material (make dielectric (epsilon eps)))))) ; The k-points list, for the Brillouin zone of a triangular lattice: (set! k-points (list (vector3 0 0 0) ; Gamma (vector3 0 0.5 0) ; M (vector3 (/ -3) (/ 3) 0) ; K (vector3 0 0 0))) ; Gamma (define-param k-interp 4) ; number of k-points to interpolate (set! k-points (interpolate k-interp k-points)) (set-param! resolution 32) (set-param! num-bands 8) (run-tm) (run-te) ; Since there is a complete gap, we could instead see it just by using: ; (run) ; The gap is between bands 12 and 13 in this case. (Note that there is ; a false gap between bands 2 and 3, which disappears as you increase the ; k-point resolution.) mpb-1.5/examples/hole-slab.ctl0000644000175400001440000000435212315326032013247 00000000000000; Photonic crystal slab consisting of a triangular lattice of air ; holes in a finite-thickness dielectric slab, optionally with a ; substrate on one side of the slab. See the paper: S. G. Johnson, ; S. Fan, P. R. Villeneuve, J. D. Joannopoulos, L. A. Kolodziejski, ; "Guided modes in photonic crystal slabs," PRB 60, 5751 (August ; 1999). ; Note that this structure has mirror symmetry throught the z=0 plane, ; and we are looking at k-vectors in the xy plane only. Thus, we can ; break up the modes into even and odd (analogous to TE and TM), using ; the run-zeven and run-zodd functions. (define-param h 0.5) ; the thickness of the slab (define-param eps 12.0) ; the dielectric constant of the slab (define-param loweps 1.0) ; the dielectric constant of the substrate (define-param r 0.3) ; the radius of the holes (define-param supercell-h 4) ; height of the supercell ; triangular lattice with vertical supercell: (set! geometry-lattice (make lattice (size 1 1 supercell-h) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5))) (set! geometry (list (make block (material (make dielectric (epsilon loweps))) (center 0 0 (* 0.25 supercell-h)) (size infinity infinity (* 0.5 supercell-h))) (make block (material (make dielectric (epsilon eps))) (center 0) (size infinity infinity h)) (make cylinder (material air) (center 0) (radius r) (height supercell-h)))) ; 1st Brillouin zone of a triangular lattice: (define Gamma (vector3 0 0 0)) (define M (vector3 0 0.5 0)) (define K (vector3 (/ -3) (/ 3) 0)) (define-param only-K false) ; run with only-K=true to only do this k-point (define-param k-interp 4) ; the number of k points to interpolate (if only-K (set! k-points (list K)) (set! k-points (interpolate k-interp (list Gamma M K Gamma)))) (set-param! resolution (vector3 32 32 16)) (set-param! num-bands 9) ; Run even and odd bands, outputting fields only at the K point: (if (= loweps 1.0) (begin ; we only have even/odd classification for symmetric structure (run-zeven (output-at-kpoint K output-hfield-z)) (run-zodd (output-at-kpoint K output-dfield-z))) (run (output-at-kpoint K output-hfield-z) display-zparities)) (display-eigensolver-stats) mpb-1.5/examples/tri-rods.ctl0000644000175400001440000000162212315325622013145 00000000000000; A triangular lattice of dielectric rods in air. (This structure has ; a band-gap for TM fields.) This file is used in the "Data Analysis ; Tutorial" section of the MPB manual. (set! num-bands 8) (set! geometry-lattice (make lattice (size 1 1 no-size) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5))) (set! geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon 12)))))) (set! k-points (list (vector3 0 0 0) ; Gamma (vector3 0 0.5 0) ; M (vector3 (/ -3) (/ 3) 0) ; K (vector3 0 0 0))) ; Gamma (set! k-points (interpolate 4 k-points)) (set! resolution 32) (run-tm (output-at-kpoint (vector3 (/ -3) (/ 3) 0) fix-efield-phase output-efield-z)) (run-te) mpb-1.5/examples/bragg-sine.ctl0000644000175400001440000000213312315325622013416 00000000000000; Compute the band structure for a Bragg mirror consisting of a ; sinusoidally-varying dielectric index. ; The index will vary sinusoidally between index-min and index-max: (define-param index-min 1) (define-param index-max 3) (define pi (* 4 (atan 1))) ; 3.14159... ; Define a function of position p (in the lattice basis) that returns ; the material at that position. In this case, we use the function: ; index-min + 0.5 * (index-max - index-min) ; * (1 + cos(2*pi*x)) ; This is periodic, and also has inversion symmetry. (define (eps-func p) (make dielectric (index (+ index-min (* 0.5 (- index-max index-min) (+ 1 (cos (* 2 pi (vector3-x p))))))))) (set! geometry-lattice (make lattice (size 1 no-size no-size))) ; 1d cell ; We'll just make it the default material, so that it goes everywhere. (set! default-material (make material-function (material-func eps-func))) (set! k-points (interpolate 9 (list (vector3 0 0 0) (vector3 0.5 0 0)))) (set-param! resolution 32) (set-param! num-bands 8) ; the TM and TE bands are degenerate, so we only need TM: (run-tm) mpb-1.5/examples/dos.scm0000644000175400001440000000436612315325721012177 00000000000000; A simple function to compute the density of states (DOS) by summing ; Gaussian smoothing functions around each computed frequency point. ; This scheme was suggested by Xavier Gonze and implemented in ABINIT ; (http://www.mapr.ucl.ac.be/Fr/PCPM/ABINIT/), with further ; suggestions by Doug Allan of Corning. (There are also more ; sophisticated algorithms employing the group velocity, but we have ; not implemented them yet.) ; To apply it to output, say, the density of states at 100 points ; points in the frequency range 0 to 1 you would do the following ; (*after* using (run) to compute the frequencies at a bunch of ; k-points filling the irreducible Brillouin zone): ; ; (include "dos.scm") ; (print-dos 0 1 100) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Given a list of frequencies, freqs, and a broadening width df, ; return a function (dos f) that returns the density of states at a ; frequency f. The integral of dos equals the number of elements of ; freqs. See also broaden, below, to compute a default df. (define ((broaden-df freqs df) f) (/ (fold-left + 0 (map (lambda (f0) (exp (- (sqr (/ (- f f0) df))))) freqs)) (* 2 df (sqrt (atan 1))))) ; Return the median difference between consecutive numbers in the list nums. (define (median-diff nums) (let ((snums (sort nums <)) (n (- (length nums) 1))) (let ((sdiff (sort (map (lambda (x y) (- y x)) (reverse (cdr (reverse snums))) (cdr snums)) <))) (* 0.5 (+ (list-ref sdiff (quotient n 2)) (list-ref sdiff (- (quotient (+ n 1) 2) 1))))))) ; Like broaden-df, above, but use a default df given by (median-diff freqs). (define (broaden freqs) (broaden-df freqs (median-diff freqs))) ; Return the broaden (dos) function applied to all-freqs, the list of ; all frequencies computed from the last run. (Actually, all-freqs ; is the list of lists of frequencies at each k-point.) (define (all-freqs-broaden) (broaden (fold-left append '() all-freqs))) ; Output the DOS from all-freqs, at num-freq points from freq-min to freq-max. (define (print-dos freq-min freq-max num-freq) (let ((dos (all-freqs-broaden))) (map (lambda (f) (print "dos:, " f ", " (dos f) "\n")) (interpolate (max 0 (- num-freq 2)) (list freq-min freq-max))))) mpb-1.5/examples/bragg.ctl0000644000175400001440000000136212315325622012465 00000000000000; Compute the bands at the X point for a quarter-wave stack Bragg ; mirror (this is the point that defines the band gap edges). ; the high and low indices: (define-param n-lo 1.0) (define-param n-hi 3.0) (define-param w-hi (/ n-lo (+ n-hi n-lo))) ; a quarter-wave stack (set! geometry-lattice (make lattice (size 1 no-size no-size))) ; 1d cell (set! default-material (make dielectric (index n-lo))) (set! geometry (list (make cylinder (material (make dielectric (index n-hi))) (center 0 0 0) (axis 1 0 0) (radius infinity) (height w-hi)))) (define-param kx 0.5) (set! k-points (list (vector3 kx 0 0))) (set-param! resolution 32) (set-param! num-bands 8) (run-tm) ; note that TM and TE bands are degenerate, so we only need TM mpb-1.5/examples/sq-rods.ctl0000644000175400001440000000201512315325766013000 00000000000000; Compute band structure for a square lattice of dielectric rods ; in air. ; Define various parameters with define-param so that they are ; settable from the command-line (with mpb =): (define-param r 0.2) ; radius of the rods (define-param eps 11.56) ; dielectric constant (define-param k-interp 4) ; number of k points to interpolate (define GaAs (make dielectric (epsilon eps))) (set! geometry-lattice (make lattice (size 1 1 no-size))) ; 2d cell (set! geometry (list (make cylinder (material GaAs) (center 0 0) (radius r) (height infinity)))) (define Gamma (vector3 0 0 0)) (define X (vector3 0.5 0 0)) (define M (vector3 0.5 0.5 0)) (set! k-points (interpolate k-interp (list Gamma X M Gamma))) (set-param! resolution 32) (set-param! num-bands 8) ; Compute the TE and TM bands. Wrap in the (begin-time message ...) ; construct from libctl so that we report the total elapsed time: (begin-time "total time for both TE and TM bands: " (run-te) (run-tm)) (display-eigensolver-stats) mpb-1.5/config.guess0000755000175400001440000013036112235234727011411 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file 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 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: mpb-1.5/compile0000755000175400001440000001624512235234727010453 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: mpb-1.5/config.h.in0000644000175400001440000001745712315337033011117 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to disable sanity checks in code */ #undef CHECK_DISABLE /* Define to turn on debugging checks */ #undef DEBUG /* Define to use debugging malloc/free */ #undef DEBUG_MALLOC /* Define when using the profiler tool */ #undef ENABLE_PROF /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef F77_FUNC /* As F77_FUNC, but for C identifiers containing underscores. */ #undef F77_FUNC_ /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define if you have a BLAS library. */ #undef HAVE_BLAS /* Define if fenv.h declares this. */ #undef HAVE_DECL_FEENABLEEXCEPT /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `feenableexcept' function. */ #undef HAVE_FEENABLEEXCEPT /* Define to 1 if you have the `getopt' function. */ #undef HAVE_GETOPT /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the header file. */ #undef HAVE_GUILE_GH_H /* Define to 1 if you have the `H5Pset_fapl_mpio' function. */ #undef HAVE_H5PSET_FAPL_MPIO /* Define to 1 if you have the `H5Pset_mpi' function. */ #undef HAVE_H5PSET_MPI /* Define if we have & link HDF5 */ #undef HAVE_HDF5 /* Define to 1 if you have the header file. */ #undef HAVE_HDF5_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have LAPACK library. */ #undef HAVE_LAPACK /* Define to 1 if you have the `ctl' library (-lctl). */ #undef HAVE_LIBCTL /* If we have the libctl_quiet variable */ #undef HAVE_LIBCTL_QUIET /* Define to 1 if you have the `dfftw' library (-ldfftw). */ #undef HAVE_LIBDFFTW /* Define to 1 if you have the `dfftw_mpi' library (-ldfftw_mpi). */ #undef HAVE_LIBDFFTW_MPI /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the `drfftw' library (-ldrfftw). */ #undef HAVE_LIBDRFFTW /* Define to 1 if you have the `drfftw_mpi' library (-ldrfftw_mpi). */ #undef HAVE_LIBDRFFTW_MPI /* Define to 1 if you have the `efence' library (-lefence). */ #undef HAVE_LIBEFENCE /* Define to 1 if you have the `fftw' library (-lfftw). */ #undef HAVE_LIBFFTW /* Define to 1 if you have the `fftw3' library (-lfftw3). */ #undef HAVE_LIBFFTW3 /* Define to 1 if you have the `fftw3f' library (-lfftw3f). */ #undef HAVE_LIBFFTW3F /* Define to 1 if you have the `fftw3f_mpi' library (-lfftw3f_mpi). */ #undef HAVE_LIBFFTW3F_MPI /* Define to 1 if you have the `fftw3f_omp' library (-lfftw3f_omp). */ #undef HAVE_LIBFFTW3F_OMP /* Define to 1 if you have the `fftw3l' library (-lfftw3l). */ #undef HAVE_LIBFFTW3L /* Define to 1 if you have the `fftw3l_mpi' library (-lfftw3l_mpi). */ #undef HAVE_LIBFFTW3L_MPI /* Define to 1 if you have the `fftw3l_omp' library (-lfftw3l_omp). */ #undef HAVE_LIBFFTW3L_OMP /* Define to 1 if you have the `fftw3_mpi' library (-lfftw3_mpi). */ #undef HAVE_LIBFFTW3_MPI /* Define to 1 if you have the `fftw3_omp' library (-lfftw3_omp). */ #undef HAVE_LIBFFTW3_OMP /* Define to 1 if you have the `fftw_mpi' library (-lfftw_mpi). */ #undef HAVE_LIBFFTW_MPI /* Define to 1 if you have the `gen' library (-lgen). */ #undef HAVE_LIBGEN /* Define to 1 if you have the `guile' library (-lguile). */ #undef HAVE_LIBGUILE /* Define to 1 if you have the header file. */ #undef HAVE_LIBGUILE_H /* Define to 1 if you have the `guile-ltdl' library (-lguile-ltdl). */ #undef HAVE_LIBGUILE_LTDL /* Define to 1 if you have the `ltdl' library (-lltdl). */ #undef HAVE_LIBLTDL /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `readline' library (-lreadline). */ #undef HAVE_LIBREADLINE /* Define to 1 if you have the `rfftw' library (-lrfftw). */ #undef HAVE_LIBRFFTW /* Define to 1 if you have the `rfftw_mpi' library (-lrfftw_mpi). */ #undef HAVE_LIBRFFTW_MPI /* Define to 1 if you have the `sfftw' library (-lsfftw). */ #undef HAVE_LIBSFFTW /* Define to 1 if you have the `sfftw_mpi' library (-lsfftw_mpi). */ #undef HAVE_LIBSFFTW_MPI /* Define to 1 if you have the `srfftw' library (-lsrfftw). */ #undef HAVE_LIBSRFFTW /* Define to 1 if you have the `srfftw_mpi' library (-lsrfftw_mpi). */ #undef HAVE_LIBSRFFTW_MPI /* Define to 1 if you have the `xfftw' library (-lxfftw). */ #undef HAVE_LIBXFFTW /* Define to 1 if you have the `xfftw_mpi' library (-lxfftw_mpi). */ #undef HAVE_LIBXFFTW_MPI /* Define to 1 if you have the `xrfftw' library (-lxrfftw). */ #undef HAVE_LIBXRFFTW /* Define to 1 if you have the `xrfftw_mpi' library (-lxrfftw_mpi). */ #undef HAVE_LIBXRFFTW_MPI /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have & link an MPI library. */ #undef HAVE_MPI /* Have nlopt lib */ #undef HAVE_NLOPT /* Define to 1 if you have the header file. */ #undef HAVE_NLOPT_H /* Define if OpenMP is enabled */ #undef HAVE_OPENMP /* Define to 1 if you have the `scm_array_get_handle' function. */ #undef HAVE_SCM_ARRAY_GET_HANDLE /* Define to 1 if you have the `scm_is_array' function. */ #undef HAVE_SCM_IS_ARRAY /* Define to 1 if you have the `scm_make_smob_type' function. */ #undef HAVE_SCM_MAKE_SMOB_TYPE /* define if we have SCM_NEWSMOB */ #undef HAVE_SCM_NEWSMOB /* define if we have SCM_SMOB_DATA */ #undef HAVE_SCM_SMOB_DATA /* define if we have SCM_SMOB_PREDICATE */ #undef HAVE_SCM_SMOB_PREDICATE /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncmp' function. */ #undef HAVE_STRNCMP /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to enable Kottke anisotropic smoothing */ #undef KOTTKE /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define if calling Fortran functions directly doesn't work. */ #undef NO_FORTRAN_FUNCTIONS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to use complex fields and not to require inversion symmetry */ #undef SCALAR_COMPLEX /* Define to use long-double precision */ #undef SCALAR_LONG_DOUBLE_PREC /* Define to use single precision */ #undef SCALAR_SINGLE_PREC /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to use OpenMP threading. */ #undef USE_OPENMP /* Version number of package */ #undef VERSION /* Define to support Hermitian/complex dielectric tensors. */ #undef WITH_HERMITIAN_EPSILON /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif