miniscript icon indicating copy to clipboard operation
miniscript copied to clipboard

[build] Honor project installation by preserving headers

Open uilianries opened this issue 1 year ago • 3 comments

Greetings!

The current CMakeLists.txt is not installing those headers provided by the project, only the library and application:

$ wget https://github.com/JoeStrout/miniscript/archive/refs/tags/v1.6.2.tar.gz
$ tar zxf v1.6.2.tar.gz && cd miniscript-1.6.2/
$ cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/tmp/install
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Check for working C compiler: /usr/local/bin/cc
-- Check for working C compiler: /usr/local/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/local/bin/c++
-- Check for working CXX compiler: /usr/local/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/conan/project/build
$ cmake --build build --target install 
Scanning dependencies of target miniscript-cpp
make[2]: Warning: File 'CMakeFiles/miniscript-cpp.dir/depend.make' has modification time 0.19 s in the future
[  3%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/Dictionary.cpp.o
[  7%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/List.cpp.o
[ 11%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptInterpreter.cpp.o
[ 14%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptIntrinsics.cpp.o
[ 18%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptKeywords.cpp.o
[ 22%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptLexer.cpp.o
[ 25%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptParser.cpp.o
[ 29%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptTAC.cpp.o
[ 33%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptTypes.cpp.o
[ 37%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/QA.cpp.o
[ 40%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/SimpleString.cpp.o
[ 44%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/SimpleVector.cpp.o
[ 48%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/SplitJoin.cpp.o
[ 51%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/UnicodeUtil.cpp.o
[ 55%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/UnitTest.cpp.o
[ 59%] Linking CXX static library libminiscript-cpp.a
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
[ 59%] Built target miniscript-cpp
Scanning dependencies of target minicmd
make[2]: Warning: File 'CMakeFiles/minicmd.dir/depend.make' has modification time 0.18 s in the future
[ 62%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/main.cpp.o
[ 66%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/DateTimeUtils.cpp.o
[ 70%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/Key.cpp.o
[ 74%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/OstreamSupport.cpp.o
[ 77%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/ShellIntrinsics.cpp.o
[ 81%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/ShellExec.cpp.o
[ 85%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/whereami/whereami.c.o
[ 88%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/editline/complete.c.o
[ 92%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/editline/editline.c.o
[ 96%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/editline/sysunix.c.o
[100%] Linking CXX executable miniscript
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
[100%] Built target minicmd
Install the project...
-- Install configuration: ""
-- Installing: /tmp/install/lib/libminiscript-cpp.a
-- Installing: /tmp/install/bin/miniscript

When consuming the installed artifacts, it will not be able to point at same folder are include directory. This PR updates the CMakeLists.txt, following the possibility customize the folders for installation, for both libraries and application, plus, installing the headers.

$ cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/tmp/install
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Check for working C compiler: /usr/local/bin/cc
-- Check for working C compiler: /usr/local/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/local/bin/c++
-- Check for working CXX compiler: /usr/local/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/conan/project/build
$ cmake --build build --target install 
Scanning dependencies of target miniscript-cpp
make[2]: Warning: File 'CMakeFiles/miniscript-cpp.dir/depend.make' has modification time 0.19 s in the future
[  3%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/Dictionary.cpp.o
[  7%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/List.cpp.o
[ 11%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptInterpreter.cpp.o
[ 14%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptIntrinsics.cpp.o
[ 18%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptKeywords.cpp.o
[ 22%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptLexer.cpp.o
[ 25%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptParser.cpp.o
[ 29%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptTAC.cpp.o
[ 33%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/MiniscriptTypes.cpp.o
[ 37%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/QA.cpp.o
[ 40%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/SimpleString.cpp.o
[ 44%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/SimpleVector.cpp.o
[ 48%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/SplitJoin.cpp.o
[ 51%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/UnicodeUtil.cpp.o
[ 55%] Building CXX object CMakeFiles/miniscript-cpp.dir/MiniScript-cpp/src/MiniScript/UnitTest.cpp.o
[ 59%] Linking CXX static library libminiscript-cpp.a
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
[ 59%] Built target miniscript-cpp
Scanning dependencies of target minicmd
make[2]: Warning: File 'CMakeFiles/minicmd.dir/depend.make' has modification time 0.18 s in the future
[ 62%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/main.cpp.o
[ 66%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/DateTimeUtils.cpp.o
[ 70%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/Key.cpp.o
[ 74%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/OstreamSupport.cpp.o
[ 77%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/ShellIntrinsics.cpp.o
[ 81%] Building CXX object CMakeFiles/minicmd.dir/MiniScript-cpp/src/ShellExec.cpp.o
[ 85%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/whereami/whereami.c.o
[ 88%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/editline/complete.c.o
[ 92%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/editline/editline.c.o
[ 96%] Building C object CMakeFiles/minicmd.dir/MiniScript-cpp/src/editline/sysunix.c.o
[100%] Linking CXX executable miniscript
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
[100%] Built target minicmd
Install the project...
-- Install configuration: ""
-- Installing: /tmp/install/lib/libminiscript-cpp.a
-- Installing: /tmp/install/bin/miniscript
-- Installing: /tmp/install/include/MiniScript/Dictionary.h
-- Installing: /tmp/install/include/MiniScript/List.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptErrors.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptInterpreter.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptIntrinsics.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptKeywords.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptLexer.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptParser.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptTAC.h
-- Installing: /tmp/install/include/MiniScript/MiniscriptTypes.h
-- Installing: /tmp/install/include/MiniScript/QA.h
-- Installing: /tmp/install/include/MiniScript/RefCountedStorage.h
-- Installing: /tmp/install/include/MiniScript/SimpleString.h
-- Installing: /tmp/install/include/MiniScript/SimpleVector.h
-- Installing: /tmp/install/include/MiniScript/SplitJoin.h
-- Installing: /tmp/install/include/MiniScript/UnicodeUtil.h
-- Installing: /tmp/install/include/MiniScript/UnitTest.h

uilianries avatar Sep 10 '24 14:09 uilianries

Hi, 👋 Do you know if there has been any progress on this pull request? This change would be useful for me.

ErniGH avatar Mar 04 '25 08:03 ErniGH

Sorry I missed this! But I confess that I don't understand it. The CMake process is meant to build an application, not a library. It doesn't need any headers once the app is built, and I certainly wouldn't want it sticking useless headers on my system.

I don't see a lot of value in a MiniScript library — it's only a handful of files; better to just include the source code in your project and avoid library version headaches.

So, can you explain the motivation behind this change?

JoeStrout avatar Mar 04 '25 14:03 JoeStrout

@JoeStrout Thank you for your explanation. The miniscript project is packaged and distributed in Conan Center (https://conan.io/center/recipes/miniscript?version=1.5.1), in which the library is managed based on the project version. This PR was opened not only to improve the packaging process but also to allow consuming the library on your side. Regards.

uilianries avatar Mar 05 '25 06:03 uilianries