Source modification using CMake

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Source modification using CMake

brian heim
Hi list,

Hope you're doing well. I have a question about using CMake to patch the source code in a project I work on. This is the situation:

- Project includes C++ transpiled from a different specialized language
- That transpiler is not cross-platform, so we include transpiled C++ in our source tree
- The generated code does not compile with MSVC 2013 because of a bug (specifically https://support.microsoft.com/en-us/help/315481/bug-too-many-unnested-loops-incorrectly-causes-a-c1061-compiler-error)
- Vendor of transpiler will not patch for this case, so we need to modify the source ourselves

We don't want to _directly_ modify the source because that means we'll have to [remember to] do it on a regular basis, when new or updated source files are added. The patching is simple enough that it can be done with a regex. I am not very experienced with CMake, but I'm aware that two ways of modifying source files are:

1. configure_file(), which doesn't seem to give tools for this purpose.
2. file(READ ...) followed by file(WRITE ...). I've gotten my regex to work with it, but my attempt overwrites the source file in-place, unlike configure_file() which places the modified file in the build tree.

Is there a way to do (2) correctly? By which I mean, can I do a form of configure_file() using a regex? Or is there an altogether easier solution that's staring me in the face?

Thank you very much in advance for your help,

Brian H

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Source modification using CMake

Nicholas Yue
Hi Brian,

  Have you consider ExternaProject() ? It has a patching feature.


Cheers

On Mon, 6 Nov 2017 at 07:35 brian heim <[hidden email]> wrote:
Hi list,

Hope you're doing well. I have a question about using CMake to patch the source code in a project I work on. This is the situation:

- Project includes C++ transpiled from a different specialized language
- That transpiler is not cross-platform, so we include transpiled C++ in our source tree
- The generated code does not compile with MSVC 2013 because of a bug (specifically https://support.microsoft.com/en-us/help/315481/bug-too-many-unnested-loops-incorrectly-causes-a-c1061-compiler-error)
- Vendor of transpiler will not patch for this case, so we need to modify the source ourselves

We don't want to _directly_ modify the source because that means we'll have to [remember to] do it on a regular basis, when new or updated source files are added. The patching is simple enough that it can be done with a regex. I am not very experienced with CMake, but I'm aware that two ways of modifying source files are:

1. configure_file(), which doesn't seem to give tools for this purpose.
2. file(READ ...) followed by file(WRITE ...). I've gotten my regex to work with it, but my attempt overwrites the source file in-place, unlike configure_file() which places the modified file in the build tree.

Is there a way to do (2) correctly? By which I mean, can I do a form of configure_file() using a regex? Or is there an altogether easier solution that's staring me in the face?

Thank you very much in advance for your help,

Brian H
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake