I have the following rule in a makefile:
ninja:
git clone git://github.com/martine/ninja.git
pushd ninja
pwd
git checkout release
./configure.py --bootstrap
popd
The idea is to download and build ninja automatically as a project dependency. Notice that the pwd
command is just there to make sure that the directory was pushed. Here's the output it generates:
git clone git://github.com/martine/ninja.git
Cloning into 'ninja'...
remote: Counting objects: 8646, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8646 (delta 0), reused 0 (delta 0), pack-reused 8642
Receiving objects: 100% (8646/8646), 1.88 MiB | 427.00 KiB/s, done.
Resolving deltas: 100% (6114/6114), done.
Checking connectivity... done.
pushd ninja
~/Desktop/core/ninja ~/Desktop/core
pwd
/Users/fratelli/Desktop/core
git checkout release
error: pathspec 'release' did not match any file(s) known to git.
make: *** [ninja] Error 1
As you can see the directory does get pushed into the stack, but pwd
does not return the correct directory. That's also why the checkout
fails afterwards. Any ideas how to fix this?
pushd ninja && pwd
? – Tasty./configure
line. It seems that it only changes the directory for the duration of the command. I'm guessing that a shell instance is created for every command line? – Ingemarpushd ninja && git checkout release && ./configure.py --bootstrap
works, but I guess it can get messy pretty fast... – Ingemar