Skip to content

Commit

Permalink
Subfolder for the configure script (#9393)
Browse files Browse the repository at this point in the history
* Subfolder for the configure script

* Fix windows test

* Renamed to build_script_folder

* Build script modules

* Fixed Mac test

* review
  • Loading branch information
lasote committed Aug 20, 2021
1 parent 4a9b65f commit db9db58
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 15 deletions.
10 changes: 5 additions & 5 deletions conan/tools/cmake/cmake.py
Expand Up @@ -73,14 +73,14 @@ def __init__(self, conanfile, parallel=True):

self._cmake_program = "cmake" # Path to CMake should be handled by environment

def configure(self, source_folder=None):
def configure(self, build_script_folder=None):
# TODO: environment?
if not self._conanfile.should_configure:
return

source = self._conanfile.source_folder
if source_folder:
source = os.path.join(self._conanfile.source_folder, source_folder)
cmakelist_folder = self._conanfile.source_folder
if build_script_folder:
cmakelist_folder = os.path.join(self._conanfile.source_folder, build_script_folder)

build_folder = self._conanfile.build_folder
generator_folder = self._conanfile.generators_folder
Expand All @@ -101,7 +101,7 @@ def configure(self, source_folder=None):
arg_list.append('-DCMAKE_INSTALL_PREFIX="{}"'.format(pkg_folder))
if platform.system() == "Windows" and self._generator == "MinGW Makefiles":
arg_list.append('-DCMAKE_SH="CMAKE_SH-NOTFOUND"')
arg_list.append('"{}"'.format(source))
arg_list.append('"{}"'.format(cmakelist_folder))

command = " ".join(arg_list)
self._conanfile.output.info("CMake command: %s" % command)
Expand Down
9 changes: 7 additions & 2 deletions conan/tools/gnu/autotools.py
@@ -1,3 +1,4 @@
import os
from conan.tools.files import load_toolchain_args
from conan.tools.gnu.make import make_jobs_cmd_line_arg
from conan.tools.microsoft import unix_path
Expand All @@ -13,7 +14,7 @@ def __init__(self, conanfile):
self._configure_args = toolchain_file_content.get("configure_args")
self._make_args = toolchain_file_content.get("make_args")

def configure(self):
def configure(self, build_script_folder=None):
"""
http://jingfenghanmax.blogspot.com.es/2010/09/configure-with-host-target-and-build.html
https://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html
Expand All @@ -22,7 +23,11 @@ def configure(self):
if not self._conanfile.should_configure:
return

configure_cmd = "{}/configure".format(self._conanfile.source_folder)
source = self._conanfile.source_folder
if build_script_folder:
source = os.path.join(self._conanfile.source_folder, build_script_folder)

configure_cmd = "{}/configure".format(source)
configure_cmd = unix_path(self._conanfile, configure_cmd)
cmd = "{} {}".format(configure_cmd, self._configure_args)
self._conanfile.output.info("Calling:\n > %s" % cmd)
Expand Down
Expand Up @@ -72,9 +72,12 @@ class AppleframeworkConan(ConanFile):
name = "mylibrary"
version = "1.0"
def layout(self):
self.folders.source = "src"
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure()
cmake.build()
cmake.install()
self.run("otool -L '%s/hello.framework/hello'" % self.build_folder)
Expand Down
Expand Up @@ -173,9 +173,12 @@ class Recipe(ConanFile):
exports_sources = ["src/*", "build-module.cmake"]
generators = "cmake"
def layout(self):
self.folders.source = "src"
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure()
cmake.build()
def package(self):
Expand Down
Expand Up @@ -36,7 +36,7 @@ class GreetingsConan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure(build_script_folder="src")
cmake.build()
def package(self):
Expand Down Expand Up @@ -143,7 +143,7 @@ class Chat(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure(build_script_folder="src")
cmake.build()
def package(self):
Expand Down Expand Up @@ -359,7 +359,7 @@ class HelloConan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure(build_script_folder="src")
cmake.build()
def package(self):
Expand Down Expand Up @@ -531,7 +531,7 @@ class Conan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure(build_script_folder="src")
cmake.build()
def package(self):
Expand Down Expand Up @@ -587,7 +587,7 @@ class Conan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure(build_script_folder="src")
cmake.build()
def package(self):
Expand Down Expand Up @@ -616,7 +616,7 @@ class Conan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_folder="src")
cmake.configure(build_script_folder="src")
cmake.build()
self.run(".%smain" % os.sep)
""".format("CMakeDeps"))
Expand Down
26 changes: 26 additions & 0 deletions conans/test/unittests/tools/gnu/autotools_test.py
@@ -0,0 +1,26 @@
import os
import textwrap

from conan.tools.files import save_toolchain_args
from conan.tools.gnu import Autotools
from conans.test.utils.mocks import ConanFileMock
from conans.test.utils.test_files import temp_folder


def test_source_folder_works():
folder = temp_folder()
os.chdir(folder)
save_toolchain_args({
"configure_args": "-foo bar",
"make_args": ""}
)
conanfile = ConanFileMock()
conanfile.folders.set_base_install(folder)
sources = "/path/to/sources"
conanfile.folders.set_base_source(sources)
autotools = Autotools(conanfile)
autotools.configure(build_script_folder="subfolder")
assert conanfile.command.replace("\\", "/") == "/path/to/sources/subfolder/configure -foo bar"

autotools.configure()
assert conanfile.command.replace("\\", "/") == "/path/to/sources/configure -foo bar"

0 comments on commit db9db58

Please sign in to comment.