dcmqi icon indicating copy to clipboard operation
dcmqi copied to clipboard

Can not build outside of a git repo

Open blezek opened this issue 6 years ago • 4 comments

Trying to build v 1.2.1 inside Docker, but gailed in super build of v1.2.1 when .git directory not copied.

-- Found Git: /usr/bin/git (found version "2.17.1")
-- Found Git: /usr/bin/git
-- Checking if building a release
-- Checking if building a release - no (found 0 tags)
CMake Error at /root/dependencies/dcmqi/CMake/FindGit.cmake:94 (message):
  Command " rev-parse --verify -q --short=7 HEAD" in directory
  /root/dependencies/dcmqi failed with output:

  fatal: not a git repository (or any of the parent directories): .git

blezek avatar Dec 17 '19 02:12 blezek

Interesting. Is this really critical? Can you just use the binaries for 1.2.1? Or check out that specific tag?

Off the top of my head, I don't know if this is fixable or not, some of those dependencies carry over from Slicer SEM.

If there is one person who knows the answer off the top of his head - it would be @jcfr!

fedorov avatar Dec 17 '19 02:12 fedorov

@fedorov, it's not absolutely critical for our projects, but anyone checking out your source code would not be able to build dcmqi. I may swap to using the pre-built binaries, however, because we deploy to several different platforms it is always better to build from scratch.

blezek avatar Dec 17 '19 13:12 blezek

short answer

To be specific, out of source builds are supported. After checking out sources using git, it is possible to build the project in the directory of your choice.

What is not supported is to build the project downloading the pre-generated source archives associated with Github Release.

long answer

but anyone checking out your source code would not be able to build dcmqi

Checking out the source using git is expected to work, the following test confirms this:

git clone [email protected]:QIICR/dcmqi.git -b v1.2.1
~/Software/cmake-3.15.2-Linux-x86_64/bin/cmake -S dcmqi/ -B dcmqi-build
cmake --build dcmqi-build/ -- -j8
[...]
-- Checking if building a release
-- Checking if building a release - yes (found tags v1.2.1)
-- Configuring DCMQI version [1.2.1]
--   DCMQI_WC_REVISION [1e82977]
--   DCMQI_WC_TAG [v1.2.1]
--   DCMQI_WC_URL [[email protected]:QIICR/dcmqi.git]
[...]
[100%] Completed 'DCMQI'
[100%] Built target DCMQI

In your Dockerfile, I suggest you use ninja (for automatic build parallelization) and do the following:

RUN \
  git clone [email protected]:QIICR/dcmqi.git -b v1.2.1 && \
  cmake -G Ninja \
    -DCMAKE_BUILD_TYPE:STRING=Release \
    -DCMAKE_INSTALL_PREFIX:PATH=/path/to/install \
    -S dcmqi/ \
    -B dcmqi-build \
  && \
  cmake --build dcmqi-build/ && \
  cmake --build dcmqi-build/dcmqi-build --target install && \
  rm -rf dcmqi dcmqi-build

What does not work is building using the pre-generated source archive associated with GitHub release.

proposed solution

Update CMake/dcmqiVersion.cmake to do the following:

  • assume a source tree without any .git folder is associated with a release
  • add support for setting DCMQI_VERSION_QUALIFIER, this would allow to explicitly override the previous assumption

jcfr avatar Dec 17 '19 14:12 jcfr

Thank you for chiming in @jcfr!

but anyone checking out your source code would not be able to build dcmqi

@blezek my point is that you can currently build from a github checkout, and you have binaries for all platforms. So far no one raised a concern about not being able to build from a source package. Is it really critical to be able to build from those source packages?

fedorov avatar Dec 18 '19 18:12 fedorov