From 07ed4746be869b31d0ddeb1aeae2bdf9410db83c Mon Sep 17 00:00:00 2001 From: Marius Greuel Date: Sun, 4 Sep 2022 16:19:01 +0200 Subject: [PATCH] CMake: Fix dependency chain between avrdude.conf.in and avrdude.conf --- CMakeLists.txt | 21 ------------------ src/CMakeLists.txt | 52 ++++++++++++++++++++++++++++++++------------- src/configure.cmake | 35 ++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 36 deletions(-) create mode 100644 src/configure.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5efc8d45..2840ff78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -281,27 +281,6 @@ endif() add_subdirectory(src) -# ===================================== -# Setup default port names -# ===================================== - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(DEFAULT_PAR_PORT "/dev/parport0") - set(DEFAULT_SER_PORT "/dev/ttyS0") -elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - set(DEFAULT_PAR_PORT "/dev/ppi0") - set(DEFAULT_SER_PORT "/dev/cuad0") -elseif (CMAKE_SYSTEM_NAME STREQUAL "Solaris") - set(DEFAULT_PAR_PORT "/dev/printers/0") - set(DEFAULT_SER_PORT "/dev/term/a") -elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(DEFAULT_PAR_PORT "lpt1") - set(DEFAULT_SER_PORT "com1") -else() - set(DEFAULT_PAR_PORT "unknown") - set(DEFAULT_SER_PORT "unknown") -endif() - # ===================================== # Configuration # ===================================== diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2cb8f5f1..00d67892 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -81,31 +81,53 @@ else() add_compile_options(-Wall) # -Wextra endif() +# ===================================== +# Setup default port names +# ===================================== + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(DEFAULT_PAR_PORT "/dev/parport0") + set(DEFAULT_SER_PORT "/dev/ttyS0") +elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(DEFAULT_PAR_PORT "/dev/ppi0") + set(DEFAULT_SER_PORT "/dev/cuad0") +elseif (CMAKE_SYSTEM_NAME STREQUAL "Solaris") + set(DEFAULT_PAR_PORT "/dev/printers/0") + set(DEFAULT_SER_PORT "/dev/term/a") +elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(DEFAULT_PAR_PORT "lpt1") + set(DEFAULT_SER_PORT "com1") +else() + set(DEFAULT_PAR_PORT "unknown") + set(DEFAULT_SER_PORT "unknown") +endif() + # ===================================== # Configure files # ===================================== -macro(configure_option option) - if(${${option}}) - string(REGEX REPLACE "(.*)@${option}_BEGIN@(.*)@${option}_END@(.*)" "\\1\\2\\3" conf_file "${conf_file}") - else() - string(REGEX REPLACE "(.*)@${option}_BEGIN@(.*)@${option}_END@(.*)" "\\1\\3" conf_file "${conf_file}") - endif() -endmacro() - -file(READ avrdude.conf.in conf_file) -configure_option(HAVE_PARPORT) -configure_option(HAVE_LINUXGPIO) -configure_option(HAVE_LINUXSPI) -file(WRITE "${PROJECT_BINARY_DIR}/avrdude.conf.in" "${conf_file}") - configure_file(cmake_config.h.in ac_cfg.h) -configure_file("${PROJECT_BINARY_DIR}/avrdude.conf.in" avrdude.conf) configure_file(avrdude.spec.in avrdude.spec) if(WIN32) configure_file(windows.rc.in windows.rc) endif() +add_custom_command( + OUTPUT avrdude.conf + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/avrdude.conf.in" avrdude.conf.in + COMMAND ${CMAKE_COMMAND} + -D HAVE_PARPORT=${HAVE_PARPORT} + -D HAVE_LINUXSPI=${HAVE_LINUXSPI} + -D HAVE_LINUXGPIO=${HAVE_LINUXGPIO} + -D DEFAULT_PAR_PORT=${DEFAULT_PAR_PORT} + -D DEFAULT_SER_PORT=${DEFAULT_SER_PORT} + -P "${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake" + DEPENDS avrdude.conf.in + VERBATIM + ) + +add_custom_target(conf ALL DEPENDS avrdude.conf) + # ===================================== # Project # ===================================== diff --git a/src/configure.cmake b/src/configure.cmake new file mode 100644 index 00000000..938c1752 --- /dev/null +++ b/src/configure.cmake @@ -0,0 +1,35 @@ +# +# configure.cmake - autoconf like multi-line configure +# Copyright (C) 2022 Marius Greuel +# +# 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, see . +# + +# Do a multi-line replace based on @