pawn
pawn copied to clipboard
Fix for Linux compilation
I have some errors and warnings when I compile pawn. And I tried to fix that. I know that it may contain some bugs because I'm not a C programmer, but it's better than nothing.
CMake log
┌─ ziggi ~/devgit/pawn/build
└─ $ cmake ..
-- The C compiler identification is GNU 6.1.1
-- The CXX compiler identification is GNU 6.1.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/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/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for alloca.h
-- Looking for alloca.h - found
-- Looking for curses.h
-- Looking for curses.h - found
-- Found DYNCALL: /usr/lib64/libdyncall_s.a;/usr/lib64/libdynload_s.a
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ziggi/devgit/pawn/build
Make log
┌─ ziggi ~/devgit/pawn/build
└─ $ make
Scanning dependencies of target pawndisasm
[ 1%] Building C object compiler/CMakeFiles/pawndisasm.dir/pawndisasm.c.o
[ 3%] Linking C executable ../pawndisasm
[ 3%] Built target pawndisasm
Scanning dependencies of target pawncc
[ 4%] Building C object compiler/CMakeFiles/pawncc.dir/sc1.c.o
/home/ziggi/devgit/pawn/compiler/sc1.c: In function ‘setopt’:
/home/ziggi/devgit/pawn/compiler/sc1.c:1425:11: warning: implicit declaration of function ‘access’ [-Wimplicit-function-declaration]
if (access(cfgfile,4)==0)
^~~~~~
[ 6%] Building C object compiler/CMakeFiles/pawncc.dir/sc2.c.o
[ 8%] Building C object compiler/CMakeFiles/pawncc.dir/sc3.c.o
[ 9%] Building C object compiler/CMakeFiles/pawncc.dir/sc4.c.o
[ 11%] Building C object compiler/CMakeFiles/pawncc.dir/sc5.c.o
[ 13%] Building C object compiler/CMakeFiles/pawncc.dir/sc6.c.o
[ 14%] Building C object compiler/CMakeFiles/pawncc.dir/sc7.c.o
[ 16%] Building C object compiler/CMakeFiles/pawncc.dir/scexpand.c.o
[ 18%] Building C object compiler/CMakeFiles/pawncc.dir/sci18n.c.o
[ 19%] Building C object compiler/CMakeFiles/pawncc.dir/sclist.c.o
[ 21%] Building C object compiler/CMakeFiles/pawncc.dir/scmemfil.c.o
[ 22%] Building C object compiler/CMakeFiles/pawncc.dir/scstate.c.o
[ 24%] Building C object compiler/CMakeFiles/pawncc.dir/scvars.c.o
[ 26%] Building C object compiler/CMakeFiles/pawncc.dir/lstring.c.o
[ 27%] Building C object compiler/CMakeFiles/pawncc.dir/memfile.c.o
[ 29%] Building C object compiler/CMakeFiles/pawncc.dir/__/amx/keeloq.c.o
[ 31%] Building C object compiler/CMakeFiles/pawncc.dir/__/linux/binreloc.c.o
[ 32%] Linking C executable ../pawncc
CMakeFiles/pawncc.dir/sc1.c.o: In function `pc_compile':
sc1.c:(.text+0x87f): warning: the use of `tempnam' is dangerous, better use `mkstemp'
[ 32%] Built target pawncc
Scanning dependencies of target amxFixed
[ 34%] Building C object amx/CMakeFiles/amxFixed.dir/amxfixed.c.o
[ 36%] Building C object amx/CMakeFiles/amxFixed.dir/amx.c.o
[ 37%] Linking C shared library ../amxFixed.so
[ 37%] Built target amxFixed
Scanning dependencies of target amxFile
[ 39%] Building C object amx/CMakeFiles/amxFile.dir/amxfile.c.o
In file included from /home/ziggi/devgit/pawn/amx/amxfile.c:128:0:
/home/ziggi/devgit/pawn/amx/minIni.c: In function ‘ini_getl’:
/home/ziggi/devgit/pawn/amx/minIni.c:82:21: warning: implicit declaration of function ‘toupper’ [-Wimplicit-function-declaration]
#define _totupper toupper
^
/home/ziggi/devgit/pawn/amx/minIni.c:341:37: note: in expansion of macro ‘_totupper’
: ((len >= 2 && _totupper((int)LocalBuffer[1]) == 'X') ? _tcstol(LocalBuffer, NULL, 16)
^~~~~~~~~
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fopen’:
/home/ziggi/devgit/pawn/amx/amxfile.c:508:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
return (cell)f;
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fclose’:
/home/ziggi/devgit/pawn/amx/amxfile.c:515:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
return fclose((FILE*)params[1]) == 0;
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fwrite’:
/home/ziggi/devgit/pawn/amx/amxfile.c:536:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
r=fputs(str,(FILE*)params[1]);
^
/home/ziggi/devgit/pawn/amx/amxfile.c:540:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
r=fputs_cell((FILE*)params[1],cptr,1);
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fread’:
/home/ziggi/devgit/pawn/amx/amxfile.c:568:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
chars=fgets_char((FILE*)params[1],str,max);
^
/home/ziggi/devgit/pawn/amx/amxfile.c:573:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
chars=fgets_cell((FILE*)params[1],cptr,max,1);
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fputchar’:
/home/ziggi/devgit/pawn/amx/amxfile.c:590:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
result=fputs_cell((FILE*)params[1],str,1);
^
/home/ziggi/devgit/pawn/amx/amxfile.c:592:26: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
fputc((int)params[2],(FILE*)params[1]);
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fgetchar’:
/home/ziggi/devgit/pawn/amx/amxfile.c:607:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
result=fgets_cell((FILE*)params[1],str,2,1);
^
/home/ziggi/devgit/pawn/amx/amxfile.c:609:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
str[0]=fgetc((FILE*)params[1]);
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fblockwrite’:
/home/ziggi/devgit/pawn/amx/amxfile.c:642:47: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
if (fwrite(aligncell(&v),sizeof(cell),1,(FILE*)params[1])!=1)
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fblockread’:
/home/ziggi/devgit/pawn/amx/amxfile.c:661:35: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
if (fread(&v,sizeof(cell),1,(FILE*)params[1])!=1)
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_ftemp’:
/home/ziggi/devgit/pawn/amx/amxfile.c:674:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
return (cell)tmpfile();
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fseek’:
/home/ziggi/devgit/pawn/amx/amxfile.c:697:10: warning: implicit declaration of function ‘lseek’ [-Wimplicit-function-declaration]
return lseek(fileno((FILE*)params[1]),params[2],whence);
^~~~~
/home/ziggi/devgit/pawn/amx/amxfile.c:697:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
return lseek(fileno((FILE*)params[1]),params[2],whence);
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fremove’:
/home/ziggi/devgit/pawn/amx/amxfile.c:101:25: warning: implicit declaration of function ‘_stat’ [-Wimplicit-function-declaration]
#define _tstat _stat
^
/home/ziggi/devgit/pawn/amx/amxfile.c:715:7: note: in expansion of macro ‘_tstat’
_tstat(fullname, &stbuf);
^~~~~~
/home/ziggi/devgit/pawn/amx/amxfile.c:100:25: warning: implicit declaration of function ‘_rmdir’ [-Wimplicit-function-declaration]
#define _trmdir _rmdir
^
/home/ziggi/devgit/pawn/amx/amxfile.c:718:9: note: in expansion of macro ‘_trmdir’
r=_trmdir(fullname);
^~~~~~~
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_flength’:
/home/ziggi/devgit/pawn/amx/amxfile.c:768:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
int fn=fileno((FILE*)params[1]);
^
/home/ziggi/devgit/pawn/amx/amxfile.c: In function ‘n_fcreatedir’:
/home/ziggi/devgit/pawn/amx/amxfile.c:99:25: warning: implicit declaration of function ‘_mkdir’ [-Wimplicit-function-declaration]
#define _tmkdir _mkdir
^
/home/ziggi/devgit/pawn/amx/amxfile.c:946:9: note: in expansion of macro ‘_tmkdir’
r=_tmkdir(fullname,0755);
^~~~~~~
[ 40%] Building C object amx/CMakeFiles/amxFile.dir/amx.c.o
[ 42%] Linking C shared library ../amxFile.so
[ 42%] Built target amxFile
Scanning dependencies of target amxTime
[ 44%] Building C object amx/CMakeFiles/amxTime.dir/amxtime.c.o
/home/ziggi/devgit/pawn/amx/amxtime.c: In function ‘gettimestamp’:
/home/ziggi/devgit/pawn/amx/amxtime.c:71:5: warning: implicit declaration of function ‘gettimeofday’ [-Wimplicit-function-declaration]
gettimeofday(&tv, NULL);
^~~~~~~~~~~~
[ 45%] Building C object amx/CMakeFiles/amxTime.dir/amx.c.o
[ 47%] Linking C shared library ../amxTime.so
[ 47%] Built target amxTime
Scanning dependencies of target amxDGram
[ 49%] Building C object amx/CMakeFiles/amxDGram.dir/amxdgram.c.o
[ 50%] Building C object amx/CMakeFiles/amxDGram.dir/amx.c.o
[ 52%] Linking C shared library ../amxDGram.so
[ 52%] Built target amxDGram
Scanning dependencies of target amxArgs
[ 54%] Building C object amx/CMakeFiles/amxArgs.dir/amxargs.c.o
/home/ziggi/devgit/pawn/amx/amxargs.c: In function ‘rawcmdline’:
/home/ziggi/devgit/pawn/amx/amxargs.c:120:46: warning: implicit declaration of function ‘getpid’ [-Wimplicit-function-declaration]
sprintf(cmdbuffer, "/proc/%d/cmdline", getpid());
^~~~~~
[ 55%] Building C object amx/CMakeFiles/amxArgs.dir/amx.c.o
[ 57%] Linking C shared library ../amxArgs.so
[ 57%] Built target amxArgs
Scanning dependencies of target amxString
[ 59%] Building C object amx/CMakeFiles/amxString.dir/amxstring.c.o
[ 60%] Building C object amx/CMakeFiles/amxString.dir/amx.c.o
[ 62%] Building C object amx/CMakeFiles/amxString.dir/amxcons.c.o
[ 63%] Linking C shared library ../amxString.so
[ 63%] Built target amxString
Scanning dependencies of target amxProcess
[ 65%] Building C object amx/CMakeFiles/amxProcess.dir/amxprocess.c.o
/home/ziggi/devgit/pawn/amx/amxprocess.c: In function ‘n_libcall’:
/home/ziggi/devgit/pawn/amx/amxprocess.c:535:12: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
result=(cell)dcCallPointer(dcVM,(void*)LibFunc);
^
[ 67%] Building C object amx/CMakeFiles/amxProcess.dir/amx.c.o
[ 68%] Linking C shared library ../amxProcess.so
[ 68%] Built target amxProcess
Scanning dependencies of target pawnrun
[ 70%] Building C object amx/CMakeFiles/pawnrun.dir/pawnrun.c.o
[ 72%] Building C object amx/CMakeFiles/pawnrun.dir/amx.c.o
[ 73%] Building C object amx/CMakeFiles/pawnrun.dir/amxcore.c.o
[ 75%] Building C object amx/CMakeFiles/pawnrun.dir/amxcons.c.o
[ 77%] Building C object amx/CMakeFiles/pawnrun.dir/amxpool.c.o
[ 78%] Building C object amx/CMakeFiles/pawnrun.dir/amxdbg.c.o
[ 80%] Building C object amx/CMakeFiles/pawnrun.dir/__/linux/binreloc.c.o
[ 81%] Linking C executable ../pawnrun
[ 81%] Built target pawnrun
Scanning dependencies of target amxFloat
[ 83%] Building C object amx/CMakeFiles/amxFloat.dir/amxfloat.c.o
[ 85%] Building C object amx/CMakeFiles/amxFloat.dir/amx.c.o
[ 86%] Linking C shared library ../amxFloat.so
[ 86%] Built target amxFloat
Scanning dependencies of target pawndbg
[ 88%] Building C object amx/CMakeFiles/pawndbg.dir/pawndbg.c.o
/home/ziggi/devgit/pawn/amx/pawndbg.c: In function ‘draw_hline’:
/home/ziggi/devgit/pawn/amx/pawndbg.c:131:29: warning: implicit declaration of function ‘printw’ [-Wimplicit-function-declaration]
#define amx_printf printw
^
/home/ziggi/devgit/pawn/amx/pawndbg.c:349:3: note: in expansion of macro ‘amx_printf’
amx_printf("%s",hline_str);
^~~~~~~~~~
/home/ziggi/devgit/pawn/amx/pawndbg.c: In function ‘send_rs232’:
/home/ziggi/devgit/pawn/amx/pawndbg.c:854:19: error: ‘fcCom’ undeclared (first use in this function)
fflush(fileno(fcCom));
^~~~~
/home/ziggi/devgit/pawn/amx/pawndbg.c:854:19: note: each undeclared identifier is reported only once for each function it appears in
/home/ziggi/devgit/pawn/amx/pawndbg.c: In function ‘rl_gets’:
/home/ziggi/devgit/pawn/amx/pawndbg.c:135:29: warning: implicit declaration of function ‘getnstr’ [-Wimplicit-function-declaration]
#define amx_gets(s,n) getnstr(s,n)
^
/home/ziggi/devgit/pawn/amx/pawndbg.c:2095:5: note: in expansion of macro ‘amx_gets’
amx_gets(str,length);
^~~~~~~~
make[2]: *** [amx/CMakeFiles/pawndbg.dir/build.make:63: amx/CMakeFiles/pawndbg.dir/pawndbg.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:531: amx/CMakeFiles/pawndbg.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
Compiler log after changes
┌─ ziggi ~/devgit/pawn/build
└─ $ make clean
┌─ ziggi ~/devgit/pawn/build
└─ $ make
[ 1%] Building C object compiler/CMakeFiles/pawndisasm.dir/pawndisasm.c.o
[ 3%] Linking C executable ../pawndisasm
[ 3%] Built target pawndisasm
[ 4%] Building C object compiler/CMakeFiles/pawncc.dir/sc1.c.o
[ 6%] Building C object compiler/CMakeFiles/pawncc.dir/sc2.c.o
[ 8%] Building C object compiler/CMakeFiles/pawncc.dir/sc3.c.o
[ 9%] Building C object compiler/CMakeFiles/pawncc.dir/sc4.c.o
[ 11%] Building C object compiler/CMakeFiles/pawncc.dir/sc5.c.o
[ 13%] Building C object compiler/CMakeFiles/pawncc.dir/sc6.c.o
[ 14%] Building C object compiler/CMakeFiles/pawncc.dir/sc7.c.o
[ 16%] Building C object compiler/CMakeFiles/pawncc.dir/scexpand.c.o
[ 18%] Building C object compiler/CMakeFiles/pawncc.dir/sci18n.c.o
[ 19%] Building C object compiler/CMakeFiles/pawncc.dir/sclist.c.o
[ 21%] Building C object compiler/CMakeFiles/pawncc.dir/scmemfil.c.o
[ 22%] Building C object compiler/CMakeFiles/pawncc.dir/scstate.c.o
[ 24%] Building C object compiler/CMakeFiles/pawncc.dir/scvars.c.o
[ 26%] Building C object compiler/CMakeFiles/pawncc.dir/lstring.c.o
[ 27%] Building C object compiler/CMakeFiles/pawncc.dir/memfile.c.o
[ 29%] Building C object compiler/CMakeFiles/pawncc.dir/__/amx/keeloq.c.o
[ 31%] Building C object compiler/CMakeFiles/pawncc.dir/__/linux/binreloc.c.o
[ 32%] Linking C executable ../pawncc
CMakeFiles/pawncc.dir/sc1.c.o: In function `pc_compile':
sc1.c:(.text+0x87f): warning: the use of `tempnam' is dangerous, better use `mkstemp'
[ 32%] Built target pawncc
[ 34%] Building C object amx/CMakeFiles/amxFixed.dir/amxfixed.c.o
[ 36%] Building C object amx/CMakeFiles/amxFixed.dir/amx.c.o
[ 37%] Linking C shared library ../amxFixed.so
[ 37%] Built target amxFixed
[ 39%] Building C object amx/CMakeFiles/amxFile.dir/amxfile.c.o
[ 40%] Building C object amx/CMakeFiles/amxFile.dir/amx.c.o
[ 42%] Linking C shared library ../amxFile.so
[ 42%] Built target amxFile
[ 44%] Building C object amx/CMakeFiles/amxTime.dir/amxtime.c.o
[ 45%] Building C object amx/CMakeFiles/amxTime.dir/amx.c.o
[ 47%] Linking C shared library ../amxTime.so
[ 47%] Built target amxTime
[ 49%] Building C object amx/CMakeFiles/amxDGram.dir/amxdgram.c.o
[ 50%] Building C object amx/CMakeFiles/amxDGram.dir/amx.c.o
[ 52%] Linking C shared library ../amxDGram.so
[ 52%] Built target amxDGram
[ 54%] Building C object amx/CMakeFiles/amxArgs.dir/amxargs.c.o
[ 55%] Building C object amx/CMakeFiles/amxArgs.dir/amx.c.o
[ 57%] Linking C shared library ../amxArgs.so
[ 57%] Built target amxArgs
[ 59%] Building C object amx/CMakeFiles/amxString.dir/amxstring.c.o
[ 60%] Building C object amx/CMakeFiles/amxString.dir/amx.c.o
[ 62%] Building C object amx/CMakeFiles/amxString.dir/amxcons.c.o
[ 63%] Linking C shared library ../amxString.so
[ 63%] Built target amxString
[ 65%] Building C object amx/CMakeFiles/amxProcess.dir/amxprocess.c.o
[ 67%] Building C object amx/CMakeFiles/amxProcess.dir/amx.c.o
[ 68%] Linking C shared library ../amxProcess.so
[ 68%] Built target amxProcess
[ 70%] Building C object amx/CMakeFiles/pawnrun.dir/pawnrun.c.o
[ 72%] Building C object amx/CMakeFiles/pawnrun.dir/amx.c.o
[ 73%] Building C object amx/CMakeFiles/pawnrun.dir/amxcore.c.o
[ 75%] Building C object amx/CMakeFiles/pawnrun.dir/amxcons.c.o
[ 77%] Building C object amx/CMakeFiles/pawnrun.dir/amxpool.c.o
[ 78%] Building C object amx/CMakeFiles/pawnrun.dir/amxdbg.c.o
[ 80%] Building C object amx/CMakeFiles/pawnrun.dir/__/linux/binreloc.c.o
[ 81%] Linking C executable ../pawnrun
[ 81%] Built target pawnrun
[ 83%] Building C object amx/CMakeFiles/amxFloat.dir/amxfloat.c.o
[ 85%] Building C object amx/CMakeFiles/amxFloat.dir/amx.c.o
[ 86%] Linking C shared library ../amxFloat.so
[ 86%] Built target amxFloat
[ 88%] Building C object amx/CMakeFiles/pawndbg.dir/pawndbg.c.o
[ 90%] Building C object amx/CMakeFiles/pawndbg.dir/amx.c.o
[ 91%] Building C object amx/CMakeFiles/pawndbg.dir/amxcore.c.o
[ 93%] Building C object amx/CMakeFiles/pawndbg.dir/amxcons.c.o
[ 95%] Building C object amx/CMakeFiles/pawndbg.dir/amxpool.c.o
[ 96%] Building C object amx/CMakeFiles/pawndbg.dir/amxdbg.c.o
[ 98%] Building C object amx/CMakeFiles/pawndbg.dir/__/linux/binreloc.c.o
[100%] Linking C executable ../pawndbg
[100%] Built target pawndbg
We still have:
CMakeFiles/pawncc.dir/sc1.c.o: In function pc_compile':
sc1.c:(.text+0x87f): warning: the use of tempnam' is dangerous, better use mkstemp'`
but I don't know how to fix this properly.
Regarding the last warning:
CMakeFiles/pawncc.dir/sc1.c.o: In function
pc_compile': sc1.c:(.text+0x87f): warning: the use oftempnam' is dangerous, better use `mkstemp' I decided to "not fix" it, because tempnam() is the more portable than the alternatives, and in the context that the Pawn compiler is using tempname(), it is not dangerous.
I decided to "not fix" it, because tempnam() is the more portable than the alternatives, and in the context that the Pawn compiler is using tempname(), it is not dangerous.
Ok, I can live with one warning:)
Speaking of fixing warnings, it would be good to remove a trailing comma in amx.h at the end of the AMX_ERR_* enumeration. https://github.com/compuphase/pawn/blob/e46e3ba97980c196e9a4e4a33ddb60993a5d2d24/amx/amx.h#L380 Because of that comma both g++ and clang++ show the following message:
amx.h:380:18: warning: commas at the end of enumerator are a C++11 extension
This message can be duplicated in a build log a lot of times since it's shown for every *.cpp file where amx.h is #included.
Updated with latest changes.
thanks ziggi, the patches fixed the compilation errors I was getting