[PD-dev] compile pd with cygwin

Patrice Colet pat at mamalala.org
Tue Dec 4 03:08:37 CET 2007


Patrice Colet a écrit :
> Hello,
> 
>   I'd like to paste s_entry.c into watchdog.c, and then handle PID with 
> one file only, what do you think about this?


Forget this, it seems not possible, as well as it is not possible to use 
cygwin for building watchdog (I've been able to build it without 
-mno-cygwin but it wasn't possible to go further), because windows 
doesn't need/use getppid(), so I suppose there is no hope for using the 
unix main function into a windows environment.

http://lists.puredata.info/pipermail/pd-list/2005-09/031049.html

By the way, could someone tell what's going wrong with this:

cd ../obj; cc   -mwindows -o ../bin/pd s_entry.o  \
                  -L../bin -lpd
s_entry.o: dans la fonction << main >>:
/home/pat/pdextended/pd-extended/pd-extended/pd/src/s_entry.c:31: 
r'ef'erence in
d'efinie vers << _sys_main >>
collect2: ld a retourn'e 1 code d''etat d'ex'ecution
make: *** [../bin/pd] Erreur 1


Maybe you would like to get some clues about what I'm doing with the 
makefile.in and configure.in:

$ diff -uw makefile.in.old makefile.in
--- makefile.in.old     2007-11-04 23:08:24.000000000 +0100
+++ makefile.in 2007-12-04 03:01:38.843750000 +0100
@@ -29,6 +29,7 @@

  CPPFLAGS = @CPPFLAGS@
  MORECFLAGS = @MORECFLAGS@
+CYGFLAGS = @CYGFLAGS@
  GINCLUDE = $(CPPFLAGS) @GUIFLAGS@
  GLIB = @LIBS@

@@ -89,15 +90,15 @@
  #

  .PHONY: pd gui externs all
-
-all: $(PDEXEC) $(BIN_DIR)/pd-watchdog $(BIN_DIR)/$(GUINAME) 
$(BIN_DIR)/pdsend \

+all: $(BIN_DIR)/$(GUINAME) $(PDEXEC) $(BIN_DIR)/pd-watchdog 
$(BIN_DIR)/pdsend \

      $(BIN_DIR)/pdreceive  $(BIN_DIR)/pd.tk externs

  bin: $(PDEXEC) $(BIN_DIR)/pd-watchdog $(BIN_DIR)/$(GUINAME) 
$(BIN_DIR)/pdsend \

      $(BIN_DIR)/pdreceive  $(BIN_DIR)/pd.tk

+
  $(OBJ) : %.o : %.c
-       $(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c
+       $(CC) $(CFLAGS) $(GFLAGS) -c -o $(OBJ_DIR)/$*.o $*.c

  $(GOBJ) : %.o : %.c
         $(CC) $(CFLAGS) $(GFLAGS) $(GINCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c
@@ -114,21 +115,31 @@
  $(BIN_DIR):
         test -d $(BIN_DIR) || mkdir -p $(BIN_DIR)

-$(BIN_DIR)/pd-watchdog: s_watchdog.c $(BIN_DIR)
-       $(CC) $(CFLAGS) $(STRIPFLAG) -o $(BIN_DIR)/pd-watchdog s_watchdog.c
+#$(BIN_DIR)/pd-watchdog: s_watchdog.c $(BIN_DIR)
+#      $(CC) $(CFLAGS) $(STRIPFLAG) -o $(BIN_DIR)/pd-watchdog s_watchdog.c
+
+$(BIN_DIR)/pd-watchdog: s_entry.o
+       cd ../obj; $(CC) $(LDFLAGS) -o pd-watchdog.exe s_entry.o $(LIBS) \
+                -L$(BIN_DIR) -lpd
+       $(STRIP) -s $(BIN_DIR)/pd-watchdog.exe

  $(BIN_DIR)/pdsend: u_pdsend.c $(BIN_DIR)
-       $(CC) $(CFLAGS)  $(STRIPFLAG) -o $(BIN_DIR)/pdsend u_pdsend.c
+       $(CC) $(CFLAGS)  $(STRIPFLAG) -o $(BIN_DIR)/pdsend u_pdsend.c 
@WINSOCK@

  $(BIN_DIR)/pdreceive: u_pdreceive.c $(BIN_DIR)
-       $(CC) $(CFLAGS)  $(STRIPFLAG) -o $(BIN_DIR)/pdreceive u_pdreceive.c
+       $(CC) $(CFLAGS)  $(STRIPFLAG) -o $(BIN_DIR)/pdreceive 
u_pdreceive.c @WIN
SOCK@
+
+#$(PDEXEC): $(OBJ) $(BIN_DIR)
+#      cd ../obj;  $(CC) $(LDFLAGS) $(DBG_CFLAGS) $(CYGFLAGS) -o 
$(PDEXEC) $(OB
J) \
+#      $(LIB)

  $(PDEXEC): $(OBJ) $(BIN_DIR)
-       cd ../obj;  $(CC) $(LDFLAGS) $(DBG_CFLAGS) -o $(PDEXEC) $(OBJ) \
-       $(LIB)
+       cd ../obj; $(CC) -mwindows -o $(PDEXEC) s_entry.o $(LIBS) \
+                -L$(BIN_DIR) -lpd
+       $(STRIP) -s $(PDEXEC)

  $(BIN_DIR)/pd-gui: $(GOBJ) $(GSRC)
-       cd ../obj; $(CC) $(INCLUDE) -o $(BIN_DIR)/$(GUINAME) $(GOBJ) \
+       cd ../obj; $(CC) $(CYGFLAGS) $(INCLUDE) -o $(BIN_DIR)/$(GUINAME) 
$(GOBJ)
  \
         $(GLIB)

  $(BIN_DIR)/pd.tk: u_main.tk
@@ -147,11 +158,12 @@
 
@executable_path/../Frameworks/Tk.framework/Versions/8.4/Tk \
                 ../bin/libPdTcl.dylib

-# this is for Windows/MinGW (only?)
-$(BIN_DIR)/pdtcl.dll: $(GOBJ)
-       cd $(BIN_DIR); dllwrap --export-all-symbols --output-def pdtcl.def \
-       --output-lib=pdtcl.a --dllname=$(GUINAME) $(OBJ_DIR)/t_tkcmd.o 
$(LIB) $(
GLIB)
-       strip --strip-unneeded $(BIN_DIR)/pdtcl.dll
+
+# this is for mingw    /cygwin
+$(BIN_DIR)/$(GUINAME): $(GOBJ)
+       cd $(BIN_DIR);  dllwrap  -mno-cygwin --export-all-symbol 
--output-def pd
.def \
+       --output-lib=pd.a --dllname=$(GUINAME) $(OBJ_DIR)/t_tkcmd.o 
$(LIB) $(GLI
B)
+       strip --strip-unneeded $(BIN_DIR)/$(GUINAME)

  externs:
         cd ../extra/bonk~;make @EXTERNTARGET@
@@ -203,17 +215,18 @@
         @echo "Pd install succeeded."

  local-clean:
-       -rm -f ../obj/* $(BIN_DIR)/pd $(BIN_DIR)/$(GUINAME) 
$(BIN_DIR)/pdsend \
-           $(BIN_DIR)/pdreceive $(BIN_DIR)/pd-watchdog m_stamp.c
+       -rm -f ../obj/* $(BIN_DIR)/pd* $(BIN_DIR)/$(GUINAME) 
$(BIN_DIR)/pdsend*
\
+           $(BIN_DIR)/pdreceive* $(BIN_DIR)/pd-watchdog m_stamp.c
         -rm -f `find ../portaudio -name "*.o"`
         -rm -f *~
-       -(cd ../doc/6.externs; rm -f *.pd_linux)
+       -(cd ../doc/6.externs; rm -f *.pd_linux; rm -f *.dll)
         -rm -f makefile.dependencies
         touch makefile.dependencies
         chmod 666 makefile.dependencies

  extra-clean:
         -rm -f `find ../extra/ -name "*.pd_*"`
+       -rm -f `find ../extra/ -name "*.dll*"`
         -rm -f tags

  clean: extra-clean local-clean

============================================

$ diff -uw configure.in.old configure.in
--- configure.in.old    2007-11-04 23:08:24.000000000 +0100
+++ configure.in        2007-12-03 15:19:11.562500000 +0100
@@ -21,7 +21,8 @@
  AC_SUBST(OSNUMBER)
  AC_SUBST(EXTERNTARGET)
  AC_SUBST(ASIOSRC)
-
+AC_SUBST(CYGFLAGS)
+AC_SUBST(WINSOCK)
  dnl other defaults

  dnl check for features
@@ -231,6 +232,7 @@
         binarymode="-m4755"
      fi
      STRIPFLAG=-s
+       WINSOCK=""
      GUINAME="pd-gui"
      if test x$USE_DEBUG_CFLAGS == "xyes";
      then
@@ -299,6 +301,7 @@
          ../portmidi/pm_common/portmidi.c \
          ../portmidi/porttime/ptmacosx_cf.c "
      STRIPFLAG=""
+       WINSOCK=""
      GUINAME="libPdTcl.dylib"

  # find the Tcl/Tk Frameworks
@@ -337,11 +340,12 @@

  # only Windows uses ASIO, for the rest, set to blank
  ASIOSRC=
-
+# only cygwin needs this flag
+CYGFLAGS=
  if test `uname -s` == MINGW32_NT-5.0;
  then
      EXT=dll
-    MORECFLAGS="-DUSEAPI_PORTAUDIO -DPA19 -DMSW -DPA_NO_DS -DPD_INTERNAL \
+    MORECFLAGS="-DUSEAPI_PORTAUDIO -DUSEAPI_PORTMIDI -DPA19 -DMSW 
-DPA_NO_DS -D
PD_INTERNAL \
          -I../portaudio/pa_common -I../portaudio/pablio \
          -mwindows -mms-bitfields "$MORECFLAGS
      PDLIB=$PDLIB" -lwsock32 -lwinmm -lole32 -lstdc++"
@@ -364,10 +368,47 @@
          ../portaudio/pa_asio/pa_asio.cpp ../asio/asio.cpp \
          ../asio/asiodrivers.cpp ../asio/asiolist.cpp"
      STRIPFLAG="--strip-unneeded"
-    GUINAME="pdtcl.dll"
+       WINSOCK=" -lwsock32"
+    GUINAME="pd.dll"
      GUIFLAGS=
  fi

+if test `uname -s` == CYGWIN_NT-5.1 || test `uname -s` == CYGWIN_NT-5.0 
|| test
  `uname -s` == CYGWIN_NT-6.0;
+then
+    EXT=dll
+    MORECFLAGS="-mno-cygwin -DPD -DNT -DUSEAPI_PORTAUDIO -DUSEAPI_MMIO 
-DPA_LIT
TLE_ENDIAN -DMSW -DPA19 -DPD_INTERNAL \
+    -I/cygdrive/c/Mingw/include -L/cygdrive/c/Mingw/lib \
+       -I../portaudio/pa_common -I../portaudio/pablio \
+       -I../portaudio/pa_asio \
+    -mms-bitfields "$MORECFLAGS
+    CYGFLAGS="-mno-cygwin"$CYGFLAGS
+    PDLIB=$PDLIB" -lwsock32 -lwinmm -lole32 -ltcl84 -ltk84 -lstdc++"
+
+    SYSSRC="s_audio_pa.c s_audio_pablio.c s_audio_paring.c \
+                 s_audio_mmio.c s_midi_mmio.c \
+        ../portaudio/pa_common/pa_allocation.c  \
+        ../portaudio/pa_common/pa_converters.c  \
+        ../portaudio/pa_common/pa_cpuload.c     \
+        ../portaudio/pa_common/pa_dither.c      \
+        ../portaudio/pa_common/pa_front.c       \
+        ../portaudio/pa_common/pa_process.c     \
+        ../portaudio/pa_common/pa_skeleton.c    \
+        ../portaudio/pa_common/pa_stream.c      \
+        ../portaudio/pa_common/pa_trace.c       \
+        ../portaudio/pa_win/pa_win_util.c       \
+        ../portaudio/pa_win/pa_win_hostapis.c   \
+        ../portaudio/pa_win_wmme/pa_win_wmme.c  \
+        ../portaudio/pa_win_ds/pa_win_ds.c      \
+        ../portaudio/pa_win_ds/dsound_wrapper.c"
+
+        ASIOSRC="../portaudio/pa_asio/iasiothiscallresolver.cpp \
+        ../portaudio/pa_asio/pa_asio.cpp ../asio/asio.cpp \
+        ../asio/asiodrivers.cpp ../asio/asiolist.cpp"
+    STRIPFLAG="--strip-unneeded"
+       WINSOCK="-lwsock32"
+    GUINAME="pd.dll"
+    GUIFLAGS=
+fi
  # support for jack, on either linux or darwin:

  if test x$jack == "xyes";

=============================================================

PS: sorry for french error messages, I've no clue about how to set this 
to english.







More information about the Pd-dev mailing list