Hashim Aziz
Hashim Aziz

Reputation: 6155

GCC errors when trying to compile checkinstall on Cygwin

I'm running Cygwin on top of Windows 7. I'm having trouble trying to install the checkinstall utility from source, and the culprit appears to be gcc.

When I run /.configure, I get the error:

-bash: ./configure: No such file or directory

So I continue with make, and get output that fails with lots of errors, presumably caused by gcc. The output can be seen in its entirety here, but below are the first and last few lines of it.

$ make
    for file in locale/checkinstall-*.po ; do \
            case ${file} in \
                    locale/checkinstall-template.po)  ;; \
                    *) \
                            out=`echo $file | sed -s 's/po/mo/'` ; \
                            msgfmt -o ${out} ${file} ; \
                            if [ $? != 0 ] ; then \
                                    exit 1 ; \
                            fi ; \
                    ;; \
            esac ; \
    done
    make -C installwatch
    make[1]: Entering directory '/cygdrive/b/Users/Me/Desktop/checkinstall-1.6.2/installwatch'
    gcc -Wall -c -D_GNU_SOURCE -DPIC -fPIC -D_REENTRANT -DVERSION=\"0.7.0beta7\" installwatch.c
   In file included from /usr/local/include/sys/param.h:33:0,
                    from installwatch.c:31:
   /usr/local/include/sys/types.h:10:2: error: #error Only Win32 target is supported!
    #error Only Win32 target is supported!
     ^~~~~
   In file included from /usr/local/include/sys/param.h:33:0,
                    from installwatch.c:31:
   /usr/local/include/sys/types.h:90:3: error: unknown type name ‘time_t’
      time_t  tv_sec; /* Seconds */
      ^~~~~~
   In file included from installwatch.c:33:0:
   /usr/local/include/sys/stat.h:10:2: error: #error Only Win32 target is supported!
    #error Only Win32 target is supported!
     ^~~~~
   In file included from /usr/local/include/sys/stat.h:14:0,
                    from installwatch.c:33:
   /usr/local/include/io.h:199:28: error: expected ‘,’ or ‘;’ before ‘_findfirst32’
      _CRTIMP intptr_t __cdecl _findfirst32(const char *_Filename,struct _finddata32_t *_FindData);
                               ^~~~~~~~~~~~ 


  ...           


    installwatch.c: In function ‘fopen’:
   installwatch.c:2560:51: error: expected ‘)’ before ‘result’
      logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
                                                       ^~~~~~
    installwatch.c:2560:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
       logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
            ^~~
    installwatch.c:2560:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
    installwatch.c:2575:51: error: expected ‘)’ before ‘result’
       logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
                                                       ^~~~~~
    installwatch.c:2575:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
       logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
            ^~~
    installwatch.c:2575:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
    installwatch.c: At top level:
    installwatch.c:2600:7: error: conflicting types for ‘getcwd’
     char *getcwd(char *buffer,size_t size) {
           ^~~~~~
    In file included from /usr/local/include/sys/stat.h:14:0,
                     from installwatch.c:33:
    /usr/local/include/io.h:279:17: note: previous declaration of ‘getcwd’ was here
       char *__cdecl getcwd (char *, int) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
                     ^~~~~~
    installwatch.c:2664:30: error: unknown type name ‘uid_t’
     int lchown(const char *path, uid_t owner, gid_t group) {
                                  ^~~~~
    installwatch.c:2664:43: error: unknown type name ‘gid_t’
     int lchown(const char *path, uid_t owner, gid_t group) {
                                               ^~~~~
    installwatch.c:2749:5: error: conflicting types for ‘mkdir’
     int mkdir(const char *pathname, mode_t mode) {
         ^~~~~
    In file included from /usr/local/include/sys/stat.h:14:0,
                     from installwatch.c:33:
    /usr/local/include/io.h:280:15: note: previous declaration of ‘mkdir’ was here
       int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
                   ^~~~~
    installwatch.c:2983:7: error: conflicting types for ‘realpath’
     char *realpath(const char *file_name,char *resolved_name) {
           ^~~~~~~~
    installwatch.c:556:6: note: previous implicit declaration of ‘realpath’ was here
      if(!realpath(path,resolved_path)) {
          ^~~~~~~~
    installwatch.c:3309:5: error: conflicting types for ‘utime’
     int utime (const char *pathname, const struct utimbuf *newtimes) {
         ^~~~~
    In file included from /usr/local/include/utime.h:6:0,
                     from installwatch.c:47:
    /usr/local/include/sys/utime.h:115:26: note: previous definition of ‘utime’ was here
     __CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
                              ^~~~~
    installwatch.c: In function ‘true_stat’:
    installwatch.c:153:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
    installwatch.c: In function ‘true_lstat’:
    installwatch.c:161:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
    installwatch.c: In function ‘true_mknod’:
    installwatch.c:157:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
    In file included from installwatch.c:35:0:
    installwatch.c: In function ‘open’:
    installwatch.c:2842:20: warning: ‘mode_t {aka short unsigned int}’ is promoted to ‘int’ when passed through ‘...’
      mode = va_arg(ap, mode_t);
                        ^
    installwatch.c:2842:20: note: (so you should pass ‘int’ not ‘mode_t {aka short unsigned int}’ to ‘va_arg’)
    installwatch.c:2842:20: note: if this code is reached, the program will abort
    At top level:
    installwatch.c:1040:12: warning: ‘__instw_printdirent64’ defined but not used [-Wunused-function]
     static int __instw_printdirent64(struct dirent64 *entry) {
                ^~~~~~~~~~~~~~~~~~~~~
    make[1]: *** [Makefile:22: installwatch.o] Error 1
    make[1]: Leaving directory '/cygdrive/b/Users/Me/Desktop/checkinstall-1.6.2/installwatch'
    make: *** [Makefile:11: all] Error 2

I'm sorry in advance if I'm going about this the wrong way, but I'm completely out of my depth with this code and the errors being thrown. I've tried using the Cygwin installer to reinstall gcc_core and other gcc packages several times to no effect.

I was in the process of using this guide to compile the latest version of gcc from source before I ran into fatal errors with that too, and decided to start from the beginning and determine whether the problem can be solved without adding yet more bloat to my Cygwin installation. Thanks in advance, it's much appreciated.

Upvotes: 0

Views: 492

Answers (1)

Doug Henderson
Doug Henderson

Reputation: 898

The checkinstall app does not appear to be configured to run on cygwin. It is configured for several specific Linux distribution families, and has a generic source release.

I have downloaded and unpacked the checkinstall-1.6.2.tar.gz file; it expands into the checkinstall-1.6.2 directory. There you find the checkinstall shell script. I don't have the time to wade through several thousand lines of shell code. It appears to require you build and install the installwatch program, which I guess will register a file change handler in order to identify all new and changed files and directories. I suspect that handler would need to change to work properly in cygwin. You might have success posting to one of the Cygwin mailing lists.

HTH

Doug

Upvotes: 2

Related Questions