Recipe for target `autoloads' failed while building Emacs in Cygwin - emacs

I am trying to build Emacs on 64-bit Windows 7 using Cyqwin:
Emacs 23.3 or 23.4
CYGWIN_NT-6.1-WOW64 1.7.11(0.260/5/3) 2012-02-24 14:05 i686 Cygwin
Some info from ./configure log:
What compiler should emacs be built with?
gcc -g -O2 -Wdeclarati
What operating system and machine description files should Emacs use?
`s/cygwin.h' and `m/intel386.h'
I am able to create Makefile without problems. However, if I run make procedure, it is building for couple of minutes then, in certain point, it gets stuck for 2 minutes and then produces error:
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
Makefile:198: recipe for target `/cygdrive/c/emacs-23.3/src/../lisp/loaddefs.el' failed
make[1]: *** [/cygdrive/c/emacs-23.3/src/../lisp/loaddefs.el] Interrupt
Makefile:339: recipe for target `src' failed
make: *** [src] Interrupt
In both cases (Emacs 23.3 and 23.4) Makefile:149 referes to the same part of a makefile in Emacs\lisp folder:
149 autoloads: $(LOADDEFS) doit
150 , chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
151 $(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
152 $(lisp)/dired.el $(lisp)/ibuffer.el
153 wd=$(lisp); $(setwins_almost); \
154 echo Directories: $$wins; \
155 $(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
in version 23.3. the building gets stuck while generating autoloads for *.el files:
Generating autoloads for progmodes/cc-mode.el...
Generating autoloads for progmodes/cc-mode.el...done
Generating autoloads for progmodes/cc-styles.el...
Generating autoloads for progmodes/cc-styles.el...done
Generating autoloads for progmodes/cc-vars.el...
Generating autoloads for progmodes/cc-vars.el...done
Generating autoloads for international/ccl.el...
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
in verison 23.4 the building gets stuck while saving loaddefs:
make[2]: Entering directory `/cygdrive/c/emacs-23.4/lisp'
chmod +w /cygdrive/c/emacs-23.4/lisp/ps-print.el /cygdrive/c/emacs-23.4/lisp/emulation/tpu-edt.el \
/cygdrive/c/emacs-23.4/lisp/emacs-lisp/cl-loaddefs.el /cygdrive/c/emacs-23.4/lisp/mail/rmail.el \
/cygdrive/c/emacs-23.4/lisp/dired.el /cygdrive/c/emacs-23.4/lisp/ibuffer.el
wd=/cygdrive/c/emacs-23.4/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; *) wins="$wins $wd/$file" ;; esac; done ; \
echo Directories: $wins; \
EMACSLOADPATH=/cygdrive/c/emacs-23.4/lisp LC_ALL=C ../src/bootstrap-emacs.exe -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/cygdrive/c/emacs-23.4/lisp/loaddefs.el")' -f batch-update-autoloads $wins
Directories: /cygdrive/c/emacs-23.4/lisp/. /cygdrive/c/emacs-23.4/lisp/./calc /cygdrive/c/emacs-23.4/lisp/./calendar /cygdrive/c/emacs-23.4/lisp/./cedet /cygdrive/c/emacs-23.4/lisp/./cedet/ede /cygdrive/c/emacs-23.4/lisp/./cedet/semantic /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/analyze /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/bovine /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/decorate/cygdrive/c/emacs-23.4/lisp/./cedet/semantic/symref /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/wisent /cygdrive/c/emacs-23.4/lisp/./cedet/srecode /cygdrive/c/emacs-23.4/lisp/./emacs-lisp /cygdrive/c/emacs-23.4/lisp/./emulation /cygdrive/c/emacs-23.4/lisp/./erc /cygdrive/c/emacs-23.4/lisp/./eshell /cygdrive/c/emacs-23.4/lisp/./gnus /cygdrive/c/emacs-23.4/lisp/./international /cygdrive/c/emacs-23.4/lisp/./language /cygdrive/c/emacs-23.4/lisp/./mail /cygdrive/c/emacs-23.4/lisp/./mh-e /cygdrive/c/emacs-23.4/lisp/./net /cygdrive/c/emacs-23.4/lisp/./nxml /cygdrive/c/emacs-23.4/lisp/./org /cygdrive/c/emacs-23.4/lisp/./play /cygdrive/c/emacs-23.4/lisp/./progmodes /cygdrive/c/emacs-23.4/lisp/./textmodes /cygdrive/c/emacs-23.4/lisp/./url
Saving file /cygdrive/c/emacs-23.4/lisp/loaddefs.el...
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
Does anyone have a clue how can I fix this bug? Wrong C compiler ? Change Makefile? Use 'make' with some parameter?
Thank you for any help or reference.
************PART2************
Ok, so here is the continuing according to your advices:
1#
make autoloads
is not possible as it is because this sub-part is in the sub-makefile so it will produce error:
$ make autoloads
chmod +w /cygdrive/c/emacs-23.4/lisp/ps-print.el /cygdrive/c/emacs-23.4/lisp/emulation/tpu-edt.el \
/cygdrive/c/emacs-23.4/lisp/emacs-lisp/cl-loaddefs.el /cygdrive/c/emacs-23.4/lisps/mail/rmail.el \
/cygdrive/c/emacs-23.4/lisp/dired.el /cygdrive/c/emacs-23.4/lisp/ibuffer.el
wd=/cygdrive/c/emacs-23.4/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; *) wins="$wins $wd/$file" ;; esac; done; \
echo Directories: $wins; \
EMACSLOADPATH=/cygdrive/c/emacs-23.4/lisp LC_ALL=C ../src/emacs -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/cygdrive/c/emacs-23.4/lisp/loaddefs.el")' -f batch-update-autoloads $wins
Directories: /cygdrive/c/emacs-23.4/lisp/. /cygdrive/c/emacs-23.4/lisp/./calc /cygdrive/c/emacs-23.4/lisp/./calendar /cygdrive/c/emacs-23.4/lisp/./cedet /cygdrive/c/emacs-23.4/lisp/./cedet/ede /cygdrive/c/emacs-23.4/lisp/./cedet/semantic /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/analyze /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/bovine /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/decorate /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/symref /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/wisent /cygdrive/c/emacs-23.4/lisp/./cedet/srecode /cygdrive/c/emacs-23.4/lisp/./emacs-lisp /cygdrive/c/emacs-23.4/lisp/./emulation /cygdrive/c/emacs-23.4/lisp/./erc /cygdrive/c/emacs-23.4/lisp/./eshell /cygdrive/c/emacs-23.4/lisp/./gnus /cygdrive/c/emacs-23.4/lisp/./international /cygdrive/c/emacs-23.4/lisp/./language /cygdrive/c/emacs-23.4/lisp/./mail /cygdrive/c/emacs-23.4/lisp/./mh-e /cygdrive/c/emacs-23.4/lisp/./net /cygdrive/c/emacs-23.4/lisp/./nxml /cygdrive/c/emacs-23.4/lisp/./org /cygdrive/c/emacs-23.4/lisp/./play /cygdrive/c/emacs-23.4/lisp/./progmodes /cygdrive/c/emacs-23.4/lisp/./textmodes /cygdrive/c/emacs-23.4/lisp/./url
/bin/sh: line 2: ../src/emacs: No such file or directory
Makefile:149: recipe for target `autoloads' failed
make: *** [autoloads] Error 127
If I am doing something wrong, please correct me.
2#
removing $(LOADDEFS) doit in deed does not change the result
3#
To run just the first part
autoloads:
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
resolves in no error within autoloads,
however after 20 sec it froze for a while and produces another error
(description of this problem is bellow)
4#
To run the second part only:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
creshed with origin error
5#
to run autoloads as in 3# also with
wd=$(lisp);
autoloads without error, later same error as in 3#
6#
run autoloads with wd=$(lisp);$(setwins_almost);
autoloads without error, later same error as in 3#
7#
add also line
echo Directories: $$wins;
autoloads without error, later same error as in 3#
8#
add also line
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
the origin error, of course
DESCRIPTION of 2nd ERROR (part 3#):
make[2]: Entering directory `/cygdrive/c/emacs-23.4/lisp'
Compiling /cygdrive/c/emacs-23.4/src/../lisp/abbrev.el
>>Error occurred processing /cygdrive/c/emacs-23.4/src/../lisp/abbrev.el: Symbol's value as variabl e is void ((warning-series))
Makefile:1478: recipe for target `compile-onefile' failed
make[2]: *** [compile-onefile] Error 1
make[2]: Leaving directory `/cygdrive/c/emacs-23.4/lisp'
Makefile:195: recipe for target `/cygdrive/c/emacs-23.4/src/../lisp/abbrev.elc' failed
make[1]: *** [/cygdrive/c/emacs-23.4/src/../lisp/abbrev.elc] Error 2
make[1]: Leaving directory `/cygdrive/c/emacs-23.4/src'
Makefile:339: recipe for target `src' failed
make: *** [src] Error 2
before that a lot of *.el files are compiled
part of the Makefile in lisp/
# The src/Makefile.in has its own set of dependencies and when they decide
# that one Lisp file needs to be re-compiled, we had better recompile it as
# well, otherwise every subsequent make will again call us, until we finally
# end up deciding that yes, the file deserves recompilation.
# One option is to try and reproduce exactly the same dependencies here as
# we have in src/Makefile.in, but it turns out to be painful
# (e.g. src/Makefile.in may have a dependency for ../lisp/foo.elc where we
# only know of $(lisp)/foo.elc). So instead we provide a direct way for
# src/Makefile.in to rebuild a particular Lisp file, no questions asked.
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
1477 compile-onefile:
1478 #echo Compiling $(THEFILE)
1479 ## Use byte-compile-refresh-preloaded to try and work around some of
1480 ## the most common bootstrapping problems.
1481 #$(emacs) -l bytecomp -f byte-compile-refresh-preloaded $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $(THEFILE)
There is a list of ELC files in Makefile:
## Explicitly list the .elc files, for the sake of parallel builds.
## http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-05/msg00016.html
## This can probably be done more elegantly, but needs to be portable.
ELCFILES = \
$(lisp)/abbrev.elc \
$(lisp)/abbrevlist.elc \
$(lisp)/add-log.elc \
$(lisp)/align.elc \
$(lisp)/allout.elc \
$(lisp)/ansi-color.elc \
$(lisp)/apropos.elc \
$(lisp)/arc-mode.elc \
...
$(lisp)/info.elc \
$(lisp)/informat.elc \
$(lisp)/international/ccl.elc \
$(lisp)/international/characters.elc \
$(lisp)/international/fontset.elc \
$(lisp)/international/isearch-x.elc \
The Makefile somewhy recreates *.el files maybe from *.elc files, however all *.el files are already there. OK now I have two errors insted of one : )(if there are not connected of course)
Thank you again.

Generated makefiles are notoriously hard to maintain and troubleshoot, but we can try. The rule in question has two prerequisites and two commands, the second composed of four shell commands strung together:
autoloads: $(LOADDEFS) doit
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
First I would try make autoloads. If that gives the same error, we can proceed, otherwise post the results.
Then remove the prerequisites ($(LOADDEFS) doit), since they should be idempotent and have no effect of the operation of this rule (unless the makefile is really convoluted) and try again.
Then split the command into smaller commands and try one by one. First
autoloads:
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
This should give no error. If it does then probably one of those files is missing; post the results. If not then try the second command without the first:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
I expect this will give the same error as originally; if not, just put the first command back in and proceed.
Now break down the second command. We can't omit the early parts, since the later parts depend on them, so first try
autoloads:
wd=$(lisp);
That should work, unless lisp is something weird (yeah, yeah, I know). Then
autoloads:
wd=$(lisp); $(setwins_almost);
I'll bet that's where it fails, but if not, continue:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins;
That should work. Then
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
will almost certainly fail.
That's enough for a first pass. Tell us the results and we'll proceed.

I'd recommend you try with the Emacs-24 pretest instead, and if that fails, report it as a bug.

Related

Make (e=2): The system cannot find the file specified. (A Curious Moon Book)

I am using makefile in windows. My makefile code is:
DB=enceladus
BUILD=${CURDIR}/build.sql
SCRIPTS=${CURDIR}/scripts
CSV='${CURDIR}/../../data/master_plan.csv'
MASTER=$(SCRIPTS)/import.sql
NORMALIZE = $(SCRIPTS)/normalize.sql
all: normalize
psql $(DB) -f $(BUILD)
master:
#cat $(MASTER) >> $(BUILD)
import: master
#echo "COPY import.master_plan FROM $(CSV) WITH DELIMITER ',' HEADER CSV;" >> $(BUILD)
normalize: import
#cat $(NORMALIZE) >> $(BUILD)
clean:
#rm -rf $(BUILD)
Which results to:
process_begin: CreateProcess(NULL, rm -rf C:/Users/zecha/cassini_data/curious_data/code/02-
normalize/build.sql, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [clean] Error 2
I dont know how to code in MAKE. I just downloaded GnuWin32 and put it on my path.

Buildroot problem with libicudata. What's this?

When I try to build system with buildroot I have problem with makin libicudata.
make[2]: Entering directory '/home/ser-builder2/buildroot/output/build/icu-64-2/source/data'
/bin/bash ../mkinstalldirs /home/ser-builder2/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot/usr/lib
LD_LIBRARY_PATH=/home/ser-builder2/buildroot/output/build/host-icu-64-2/source/stubdata:/home/ser-builder2/buildroot/output/build/host-icu-64-2/source/tools/ctestfw:/home/ser-builder2/buildroot/output/build/host-icu-64-2/source/lib:$LD_LIBRARY_PATH /home/ser-builder2/buildroot/output/build/host-icu-64-2/source/bin/pkgdata -O ../data/icupkg.inc -q -c -s /home/ser-builder2/buildroot/output/build/icu-64-2/source/data/out/build/icudt64l -d ../lib -m dll -r 64.2 -e icudt64 -T ./out/tmp -s ./out/build/icudt64l -p icudt64l -L icudata ./out/tmp/icudata.lst -I /home/ser-builder2/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot/usr/lib
pkgdata: cd ../lib/ && /usr/bin/install -c libicudata.so.64.2 /home/ser-builder2/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot/usr/lib/libicudata.so.64.2
pkgdata: cd /home/ser-builder2/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot/usr/lib && rm -f libicudata.so.64 && ln -s libicudata.so.64.2 libicudata.so.64
Segmentation fault (core dumped)
-- return status = 35584
Error creating symbolic links. Failed command: cd /home/ser-builder2/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot/usr/lib && rm -f libicudata.so.64 && ln -s libicudata.so.64.2 libicudata.so.64
Makefile:180: recipe for target 'install-local' failed
make[2]: *** [install-local] Error 1
make[2]: Leaving directory '/home/ser-builder2/buildroot/output/build/icu-64-2/source/data'
Makefile:153: recipe for target 'install-recursive' failed
make[1]: *** [install-recursive] Error 2
make[1]: Leaving directory '/home/ser-builder2/buildroot/output/build/icu-64-2/source'
package/pkg-generic.mk:278: recipe for target '/home/ser-builder2/buildroot/output/build/icu-64-2/.stamp_staging_installed' failed
make: *** [/home/ser-builder2/buildroot/output/build/icu-64-2/.stamp_staging_installed] Error 2
I don't know what to do with this. I tried to build this on another computer and everything works fine.
I run into this problem too and tracked it down to the execution of pkgdata. Somehow LD_LIBRARY_PATH got screwed which causes '/usr/bin/rm' to fail. To solve it, I've modified Makefile.in and removed LD_LIBRARY_PATH=... from the invocation line.
diff -r -u a/source/Makefile.in b/source/Makefile.in
--- a/source/Makefile.in 2022-06-02 10:48:31.493046292 +0200
+++ b/source/Makefile.in 2022-06-02 11:25:57.303758900 +0200
## -258,7 +258,7 ##
#(echo 'TOOLBINDIR=$$(cross_buildroot)/bin' ;\
echo 'TOOLLIBDIR=$$(cross_buildroot)/lib' ;\
echo "INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(TOOLLIBDIR):$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$$$'"$(LDLIBRARYPATH_ENVVAR)" ;\
- echo "PKGDATA_INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$(TOOLLIBDIR):$$$$'"$(LDLIBRARYPATH_ENVVAR) " ;\
+ echo "PKGDATA_INVOKE= " ;\
echo ) >> $#
config/icucross.inc: $(top_builddir)/icudefs.mk $(top_builddir)/Makefile #platform_make_fragment#
I know that this question is quite old now, but I want to mention it if someone else will run into this.

how to fix the issue "Makefrag:68: recipe for target 'simv-freechips.rocketchip.system-DefaultConfig' failed"

I am trying to build rocketchip & vsim for the same as described here
But I am stuck at vsim run while doing below:
koushik#koushik-Presario-CQ43-Notebook-PC:~/riscv_ks/rocket-chip/vsim$ make -j2 run
mkdir -p ./output
cd . && \
rm -rf csrc && \
vcs -full64 -notice -line +lint=all,noVCDE,noONGS,noUI -error=PCWM-L -timescale=1ns/10ps -quiet +rad +v2k +vcs+lic+wait +vc+list -CC "-I/include" -CC "-I/home/koushik/riscvtools/include" -CC "-std=c++11" -CC "-Wl,-rpath,/home/koushik/riscvtools/lib" /home/koushik/riscvtools/lib/libfesvr.so -sverilog +incdir+/home/koushik/riscv_ks/rocket-chip/vsim/generated-src +define+CLOCK_PERIOD=1.0 /home/koushik/riscv_ks/rocket-chip/vsim/generated-src/freechips.rocketchip.system.DefaultConfig.v /home/koushik/riscv_ks/rocket-chip/vsim/generated-src/freechips.rocketchip.system.DefaultConfig.behav_srams.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/TestDriver.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/SimDTM.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/SimJTAG.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/plusarg_reader.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/ClockDivider2.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/ClockDivider3.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/AsyncResetReg.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/vsrc/EICG_wrapper.v /home/koushik/riscv_ks/rocket-chip/src/main/resources/csrc/SimDTM.cc /home/koushik/riscv_ks/rocket-chip/src/main/resources/csrc/SimJTAG.cc /home/koushik/riscv_ks/rocket-chip/src/main/resources/csrc/remote_bitbang.cc +define+PRINTF_COND=TestDriver.printf_cond +define+STOP_COND=!TestDriver.reset +define+RANDOMIZE_MEM_INIT +define+RANDOMIZE_REG_INIT +define+RANDOMIZE_GARBAGE_ASSIGN +define+RANDOMIZE_INVALID_ASSIGN +define+RANDOMIZE_DELAY=2 +libext+.v -o ./simv-freechips.rocketchip.system-DefaultConfig \
-debug_pp \
ln -fs /home/koushik/riscvtools/riscv64-unknown-elf/share/riscv-tests/isa/rv64um-v-mul output/rv64um-v-mul
/bin/bash: line 2: vcs: command not found
Makefrag:68: recipe for target 'simv-freechips.rocketchip.system-DefaultConfig' failed
make: *** [simv-freechips.rocketchip.system-DefaultConfig] Error 127
make: *** Waiting for unfinished jobs....
You don't have VCS installed so its failing to find the command that runs it.
Try "make verilog", this should created the default configuration of rocket-chip.
or if you want to create one of the other canned configurations in Config.scala then you can use "make CONFIG=TinyConfig verilog" where TinyConfig can be replaced with any of the canned configurations.
Thanks,
Ciaran

rpmbuild no such file or directory

I'm just learning making rpm packages for some custom builds of software that gets compiled from source (some legacy stuff needs this, so I'm trying to learn, as some packages can't use the latest versions), but hitting an error (I'm doing this in Vagrant, and also as root, but typically I'm trying not to use root as I'm aware it has potential for damage, its just this example seems to need some root changes).
sudo rpmbuild -ba testspec.spec --define "_topdir /tmp/"
So far it looks to be using the directory I expected, /tmp/rpmbuild
make[2]: Entering directory `/tmp/rpmbuild/BUILD/exim-4.80.1/build-Linux-x86_64/pdkim'
make[2]: `pdkim.a' is up to date.
make[2]: Leaving directory `/tmp/rpmbu
But then I see these errors...
/usr/lib/rpm/brp-compress: line 8: cd: /tmp/BUILDROOT/custom-exim-4.80.1-1.x86_64: No such file or directory
+ /usr/lib/rpm/brp-strip
find: `/tmp/BUILDROOT/custom-exim-4.80.1-1.x86_64': No such file or directory
+ /usr/lib/rpm/brp-strip-static-archive
find: `/tmp/BUILDROOT/custom-exim-4.80.1-1.x86_64': No such file or directory
+ /usr/lib/rpm/brp-strip-comment-note
So it now seems to be looking in /tmp/BUILDROOT
I'm new to rpmbuild, and don't quite understand some of the process.
My test spec file is at...
%define myversion exim-4.80.1
##%define mybase %{getenv:HOME}
%define mybase /tmp
%define _topdir %{mybase}/rpmbuild
%define _tmppath %{mybase}/rpmbuild/tmp
%define name custom-exim
%define release 1
%define version 4.80.1
%define buildroot %{_topdir}/%{name}-%{version}-root
BuildRoot: %{buildroot}
Summary: %{name}
Name: %{name}
Version: %{version}
Release: %{release}
Source0: ftp://exim.noris.de/exim/exim4/old/exim-4.80.1.tar.gz
License: GPLv1+
Group: Language
AutoReq: no
AutoProv: no
Requires: db4-devel pcre-devel libdb-devel libXt-devel libXaw-devel
%description
Custom Exim Build
%prep
#Do the following manually before building rpm
#mkdir -p /tmp/rpmbuild/BUILD /tmp/rpmbuild/SPECS /tmp/rpmbuild/SOURCES /tmp/rpmbuild/BUILDROOT /tmp/rpmbuild/RPMS /tmp/rpmbuild/SRPMS
#wget ftp://exim.noris.de/exim/exim4/old/exim-4.80.1.tar.gz -O /tmp/rpmbuild/SOURCES/exim-4.80.1.tar.gz
%setup -q -n %{myversion}
grep exim /etc/passwd || useradd -c "Exim" -d /var/spool/exim -m -s /bin/bash exim
%build
# exim needs to config changes before compiling, may do these first and repackage
cp %{mybase}/rpmbuild/BUILD/%{myversion}/src/EDITME %{mybase}/rpmbuild/BUILD/%{myversion}/Local/Makefile
cp %{mybase}/rpmbuild/BUILD/%{myversion}/exim_monitor/EDITME %{mybase}/rpmbuild/BUILD/%{myversion}/Local/eximon.conf
sed -i -e 's/EXIM_USER=$/EXIM_USER=exim/g' "%{mybase}/rpmbuild/BUILD/%{myversion}/Local/Makefile"
sed -i -e 's/LOOKUP_DNSDB=yes/#LOOKUP_DNSDB=yes/g' "%{mybase}/rpmbuild/BUILD/%{myversion}/Local/Makefile"
make
%install
rm -rf $RPM_BUILD_ROOT
#%{__mkdir_p} '%{buildroot}%{_sbindir}'
make install
%clean
rm -rf $RPM_BUILD_ROOT
%post
%postun
%files
Why is it using /tmp/BUILDROOT literally, instead of /tmp/rpmbuild, and are there other obvious things I'm doing wrong ? I've looked at a lot of other tutorials on rpmbuild, but aren't very clear on best practices or what happens during each phase.
Since the buildroot parm is not passed to rpmbuild, the default path is being used by your spec file:
BuildRoot: %{buildroot}
Try adding the buildroot parm... Add buildroot /tmp/rpmbuild to --define
Or if using a makefile:
BUILD_TMP=/tmp/rpmbuild
TOP_DIR=/tmp
rpmbuild -bb
--buildroot $(BUILD_TMP)
--topdir $(TOP_DIR)
$(SPEC_DIR)/testspec.spec
In my case rpm-build was missing.
So sudo yum install rpm-build solved the problem. Or if you use puppet:
package { 'rpm-build':
ensure => latest,
}

iOS DOxygen adding docSet to Xcode Documents

Hey Everyone just having a problem with DOxygen, Ive generated my documentation and its allthere, but i find i am unable to add it to Xcode.
I currently have a script which takes the HTML directory containing all the files, and generates the .docset file.
# Run the makefile. The --silent parameter stops it from spamming us with too much output.
#/Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil
make --silent -C "$DOCSET_OUTPUT/html" install
# Load docset
osascript "$[location of personal library]/Scripts/XcodeLoadDocSet.scpt"
"~/Library/Developer/Shared/Documentation/DocSets/$DOXYGEN_ID.docset"
This should also add the item to xcode, but running it manually reveals a problem..
/Developer/usr/bin/docsetutil index com.[my app].docset
make: /Developer/usr/bin/docsetutil: No such file or directory
make: *** [docset] Error 1
This is what i have atm for the makefile,
DOCSET_NAME=com.[my app].docset
DOCSET_CONTENTS=$(DOCSET_NAME)/Contents
DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources
DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents
DESTDIR=~/Library/Developer/Shared/Documentation/DocSets
XCODE_INSTALL=$(shell xcode-select -print-path)
all: docset
docset:
mkdir -p $(DOCSET_DOCUMENTS)
cp Nodes.xml $(DOCSET_RESOURCES)
cp Tokens.xml $(DOCSET_RESOURCES)
cp Info.plist $(DOCSET_CONTENTS)
tar --exclude $(DOCSET_NAME) \
--exclude Nodes.xml \
--exclude Tokens.xml \
--exclude Info.plist \
--exclude Makefile -c -f - . \
| (cd $(DOCSET_DOCUMENTS); tar xvf -)
$(XCODE_INSTALL)/usr/bin/docsetutil index $(DOCSET_NAME)
rm -f $(DOCSET_DOCUMENTS)/Nodes.xml
rm -f $(DOCSET_DOCUMENTS)/Info.plist
rm -f $(DOCSET_DOCUMENTS)/Makefile
rm -f $(DOCSET_RESOURCES)/Nodes.xml
rm -f $(DOCSET_RESOURCES)/Tokens.xml
install: docset
mkdir -p $(DESTDIR)
cp -R $(DOCSET_NAME) $(DESTDIR)
uninstall:
rm -rf $(DESTDIR)/$(DOCSET_NAME)
always:
If anyone has had a similer problem please let me know.
Cheers
Michael.
With Xcode 4, docsetutil is located under /Applications/Xcode.app/Contents/Developer/usr/bin/