Mercurial > octave
view scripts/pkg/private/configure_make.m @ 27216:823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
Files affected: doc/interpreter/TODO, etc/HACKING.md,
examples/code/oregonator.cc, examples/code/oregonator.m,
libgui/graphics/ObjectFactory.cc, libinterp/corefcn/defun-dld.h,
libinterp/corefcn/defun.h, libinterp/corefcn/graphics.cc,
libinterp/corefcn/ls-hdf5.cc, libinterp/corefcn/oct-stream.cc,
libinterp/octave-value/cdef-class.cc,
libinterp/octave-value/cdef-manager.cc,
libinterp/octave-value/cdef-method.cc,
libinterp/octave-value/cdef-object.cc,
libinterp/octave-value/cdef-package.cc,
libinterp/octave-value/cdef-property.cc,
libinterp/octave-value/cdef-utils.cc,
libinterp/octave-value/ov-classdef.cc,
libinterp/octave-value/ov-java.cc, libinterp/octave-value/ov.h,
libinterp/parse-tree/oct-parse.yy, liboctave/array/Array.h,
liboctave/numeric/bsxfun.h, liboctave/util/oct-rl-hist.c,
scripts/help/__unimplemented__.m, scripts/image/imformats.m,
scripts/image/imwrite.m, scripts/image/private/__imread__.m,
scripts/image/private/__imwrite__.m,
scripts/java/org/octave/Matrix.java, scripts/linear-algebra/condeig.m,
scripts/miscellaneous/inputParser.m, scripts/miscellaneous/publish.m,
scripts/pkg/private/configure_make.m,
scripts/special-matrix/gallery.m, scripts/web/weboptions.m,
test/classdef/classdef.tst.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 26 Jun 2019 15:47:03 -0400 |
parents | 00f796120a6d |
children | b442ec6dda5c |
line wrap: on
line source
## Copyright (C) 2005-2019 Søren Hauberg ## Copyright (C) 2010 VZLU Prague, a.s. ## ## This file is part of Octave. ## ## Octave 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. ## ## Octave 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 Octave; see the file COPYING. If not, see ## <https://www.gnu.org/licenses/>. ## -*- texinfo -*- ## @deftypefn {} {} configure_make (@var{desc}, @var{packdir}, @var{verbose}) ## Undocumented internal function. ## @end deftypefn function configure_make (desc, packdir, verbose) ## Perform ./configure, make, make install in "src". if (isfolder (fullfile (packdir, "src"))) src = fullfile (packdir, "src"); octave_bindir = __octave_config_info__ ("bindir"); ver = version (); ext = __octave_config_info__ ("EXEEXT"); mkoctfile_program = fullfile (octave_bindir, ... sprintf ("mkoctfile-%s%s", ver, ext)); octave_config_program = fullfile (octave_bindir, ... sprintf ("octave-config-%s%s", ver, ext)); if (ispc () && ! isunix ()) octave_binary = fullfile (octave_bindir, sprintf ("octave-%s.bat", ver)); else octave_binary = fullfile (octave_bindir, sprintf ("octave-%s%s", ver, ext)); endif if (! exist (mkoctfile_program, "file")) __gripe_missing_component__ ("pkg", "mkoctfile"); endif if (! exist (octave_config_program, "file")) __gripe_missing_component__ ("pkg", "octave-config"); endif if (! exist (octave_binary, "file")) __gripe_missing_component__ ("pkg", "octave"); endif if (verbose) mkoctfile_program = [mkoctfile_program " --verbose"]; endif cenv = {"MKOCTFILE"; mkoctfile_program; "OCTAVE_CONFIG"; octave_config_program; "OCTAVE"; octave_binary}; scenv = sprintf ("%s='%s' ", cenv{:}); ## Configure. if (exist (fullfile (src, "configure"), "file")) flags = ""; if (isempty (getenv ("CC"))) flags = [flags ' CC="' mkoctfile("-p", "CC") '"']; endif if (isempty (getenv ("CXX"))) flags = [flags ' CXX="' mkoctfile("-p", "CXX") '"']; endif if (isempty (getenv ("AR"))) flags = [flags ' AR="' mkoctfile("-p", "AR") '"']; endif if (isempty (getenv ("RANLIB"))) flags = [flags ' RANLIB="' mkoctfile("-p", "RANLIB") '"']; endif cmd = ["cd '" src "'; " scenv "./configure " flags]; [status, output] = shell (cmd, verbose); if (status != 0) rmdir (desc.dir, "s"); disp (output); error ("pkg: error running the configure script for %s.", desc.name); endif endif ## Make. if (ispc ()) jobs = 1; else jobs = nproc ("overridable"); endif if (exist (fullfile (src, "Makefile"), "file")) [status, output] = shell (sprintf ("%s make --jobs %i --directory '%s'", scenv, jobs, src), verbose); if (status != 0) rmdir (desc.dir, "s"); disp (output); error ("pkg: error running 'make' for the %s package.", desc.name); endif endif endif endfunction ## Executes a shell command. ## In the end it calls system(), but in the case of MS Windows it will first ## check if sh.exe works. ## ## If VERBOSE is true, it will prints the output to STDOUT in real time and ## the second output argument will be an empty string. Otherwise, it will ## contain the output of the execeuted command. function [status, output] = shell (cmd, verbose) persistent have_sh; cmd = strrep (cmd, '\', '/'); if (ispc () && ! isunix ()) if (isempty (have_sh)) if (system ('sh.exe -c "exit"')) have_sh = false; else have_sh = true; endif endif if (have_sh) cmd = ['sh.exe -c "' cmd '"']; else error ("pkg: unable to find the command shell."); endif endif ## if verbose, we want to display the output in real time. To do this, we ## must call system with 1 output argument. But then the variable 'output' ## won't exist. So we initialize it empty. If an error does occur, and we ## are verbose we will return an empty string but it's all fine since ## the error message has already been displayed. output = ""; if (verbose) [status] = system (cmd); else [status, output] = system (cmd); endif endfunction