GTK/X11 Port (aka Linux/UNIX GUI)

This is for people involved in the developement of Snes9x, or SNES emulators in general.
BUG REPORTS BELONG IN TECH SUPPORT/BUG TRACKING!
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Post by BearOso »

uncholowapo wrote:Hey I am having a problem compiling the latest release ()1.51.61) on PPC. I know it's an arch issue because it compiles cleanly on my laptop. Anyways I disable opengl and don't use the assembler because it is on linux on my PS3 and it doesn't have access to the GPU. Here is the error message when I compile:

Code: Select all

/usr/include/X11/extensions/Xrandr.h:88: error: 'Connection' does not name a type
/usr/include/X11/extensions/Xrandr.h:251: error: 'Connection' does not name a type
/usr/include/X11/extensions/Xrandr.h:88: error: 'Connection' does not name a type
/usr/include/X11/extensions/Xrandr.h:251: error: 'Connection' does not name a type
make[1]: *** [snes9x_gtk-gtk_binding.o] Error 1
make[1]: *** Waiting for unfinished jobs....
src/gtk_cheat.cpp:197: warning: unused parameter 'button'
src/gtk_cheat.cpp:203: warning: unused parameter 'button'
src/gtk_cheat.cpp:211: warning: unused parameter 'cell_renderer'
make[1]: *** [snes9x_gtk-gtk_cheat.o] Error 1
dxmv -f .deps/snes9x_gtk-filter_hq2x.Tpo .deps/snes9x_gtk-filter_hq2x.Po
make[1]: Leaving directory `/home/Juan/rpmbuild/BUILD/snes9x-1.51-src/gtk'
make: *** [all-recursive] Error 1
And I use this for the configure process:

Code: Select all

./configure --with-netplay --with-gtk --without-opengl --without-assembler
I'll need to see more of the error message. You should also run make with -j1 or without any -j flags because the errors can easily be buried in output with multiple processes. This looks like an X11 dependency issue from the bits you've posted.
uncholowapo
Snes9x White Belt
Posts: 7
Joined: Thu Oct 16, 2008 1:05 am

Post by uncholowapo »

Hmmm I have installed ever development package for X11 and similar. And that is the error message. Nothing else.

I tried compiling without the -j command and came out with the same results.
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Post by BearOso »

uncholowapo wrote:Hmmm I have installed ever development package for X11 and similar. And that is the error message. Nothing else.

I tried compiling without the -j command and came out with the same results.
The -j suggestion is just for providing the error message without a lot of clutter. Can you provide some more lines up? (about 3 times as many would be helpful)

If you're desperate, you can try compiling without Xrandr resolution-changing by using the --without-xrandr flag. If that works, then you do have an X11 header problem.
Spongeroberto
Snes9x White Belt
Posts: 2
Joined: Wed Oct 22, 2008 6:16 pm

Post by Spongeroberto »

Hey, em... this is might be a lot of work, but eh... could it be possible to give a rom-list on the main screen? Having a library would be so convenient. If you're feeling adventurous you might even use images as well (like gsnes9x)
ectara
Snes9x White Belt
Posts: 3
Joined: Sun Jan 18, 2009 4:08 am

Loss of POV hat functionality

Post by ectara »

Recently, I plugged my Saitek Cyborg P2500 Rumble into my USB port, started up snes9x-gtk, and much to my dismay, my hat did not work. Previously, it was acting as axis #4 and #5, but now it is unrecognised and I can no longer use my d-pad with my games. All other axes and buttons are fine, but I lost use of only the hat. Any known solution? Using the newest version, and a couple legacy versions as well. Joystick is enabled, and I am using the latest binary from the .deb.

Linux Aion 2.6.25-2-686 #1 SMP Fri Jul 18 17:46:56 UTC 2008 i686 GNU/Linux

My conf(still contains the mapping for the d-pad):
<?xml version="1.0"?>
<snes9x>
<preferences>
<option name="full_screen_on_open" value="0"/>
<option name="change_display_resolution" value="0"/>
<option name="video_mode" value="0"/>
<option name="scale_to_fit" value="1"/>
<option name="maintain_aspect_ratio" value="0"/>
<option name="scale_method" value="0"/>
<option name="overscan" value="0"/>
<option name="force_hires" value="0"/>
<option name="force_inverted_byte_order" value="0"/>
<option name="data_location" value="2"/>
<option name="multithreading" value="0"/>
<option name="last_directory" value="/Stuff/emulator_games/snes"/>
<option name="custom_sram_directory" value="/Stuff/emulator_games/saves"/>
<option name="window_width" value="991"/>
<option name="window_height" value="712"/>
<option name="preferences_width" value="523"/>
<option name="preferences_height" value="480"/>
<option name="pause_emulation_on_switch" value="0"/>
<option name="num_threads" value="2"/>
<option name="default_esc_behavior" value="1"/>
<option name="prevent_screensaver" value="0"/>
<option name="fullscreen" value="0"/>
<option name="ui_visible" value="1"/>
<option name="statusbar_visible" value="1"/>
<option name="ntsc_format" value="1"/>
<option name="ntsc_hue" value="0.000000"/>
<option name="ntsc_saturation" value="0.000000"/>
<option name="ntsc_contrast" value="0.000000"/>
<option name="ntsc_brightness" value="0.000000"/>
<option name="ntsc_sharpness" value="0.000000"/>
<option name="ntsc_warping" value="0.000000"/>
<option name="ntsc_scanline_intensity" value="1"/>
<option name="scanline_filter_intensity" value="0"/>
<option name="hw_accel" value="0"/>
<option name="bilinear_filter" value="0"/>
<option name="sync_to_vblank" value="1"/>
<option name="use_pbos" value="1"/>
<option name="pbo_format" value="2"/>
<option name="npot_textures" value="0"/>
<option name="joystick_threshold" value="1"/>
<option name="netplay_is_server" value="0"/>
<option name="netplay_sync_reset" value="1"/>
<option name="netplay_send_rom" value="0"/>
<option name="netplay_default_port" value="6096"/>
<option name="netplay_max_frame_loss" value="10"/>
<option name="netplay_last_port" value="6096"/>
<option name="netplay_last_rom" value=""/>
<option name="netplay_last_host" value=""/>
<option name="mute_sound" value="0"/>
<option name="sound_buffer_size" value="32"/>
<option name="transparency" value="1"/>
<option name="show_frame_rate" value="1"/>
<option name="frameskip" value="200"/>
<option name="save_sram_after_secs" value="0"/>
<option name="16bit_sound" value="1"/>
<option name="stereo" value="1"/>
<option name="reverse_stereo" value="0"/>
<option name="gaussian_interpolation" value="1"/>
<option name="envelope_reading" value="1"/>
<option name="sound_echo" value="1"/>
<option name="master_volume" value="1"/>
<option name="playback_rate" value="5"/>
<option name="sound_decoder" value="0"/>
<option name="speedhacks" value="0"/>
<option name="hdma" value="1"/>
<option name="block_invalid_vram_access" value="1"/>
<option name="upanddown" value="0"/>
</preferences>
<controls>
<calibration joystick="0">
<axis number="0" min="-32768" max="32767" center="0"/>
<axis number="1" min="-32768" max="32767" center="0"/>
<axis number="2" min="-32768" max="32767" center="0"/>
<axis number="3" min="-32768" max="32767" center="0"/>
</calibration>
<joypad number="0">
<binding name="Up" binding="556925450"/>
<binding name="Down" binding="556925451"/>
<binding name="Left" binding="556925448"/>
<binding name="Right" binding="556925449"/>
<binding name="Start" binding="553648138"/>
<binding name="Select" binding="553648139"/>
<binding name="A" binding="553648131"/>
<binding name="B" binding="553648130"/>
<binding name="X" binding="553648129"/>
<binding name="Y" binding="553648128"/>
<binding name="L" binding="553648134"/>
<binding name="R" binding="553648135"/>
<binding name="Turbo A" binding="553648133"/>
<binding name="Turbo B" binding="553648132"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="553648136"/>
<binding name="Turbo R" binding="553648137"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="1">
<binding name="Up" binding="268500818"/>
<binding name="Down" binding="268500820"/>
<binding name="Left" binding="268500817"/>
<binding name="Right" binding="268500819"/>
<binding name="Start" binding="268500749"/>
<binding name="Select" binding="268435548"/>
<binding name="A" binding="268435553"/>
<binding name="B" binding="268435571"/>
<binding name="X" binding="268435556"/>
<binding name="Y" binding="268435558"/>
<binding name="L" binding="268435575"/>
<binding name="R" binding="268435557"/>
<binding name="Turbo A" binding="268435578"/>
<binding name="Turbo B" binding="268435576"/>
<binding name="Turbo X" binding="268435555"/>
<binding name="Turbo Y" binding="268435574"/>
<binding name="Turbo L" binding="268435569"/>
<binding name="Turbo R" binding="268435570"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="2">
<binding name="Up" binding="0"/>
<binding name="Down" binding="0"/>
<binding name="Left" binding="0"/>
<binding name="Right" binding="0"/>
<binding name="Start" binding="0"/>
<binding name="Select" binding="0"/>
<binding name="A" binding="0"/>
<binding name="B" binding="0"/>
<binding name="X" binding="0"/>
<binding name="Y" binding="0"/>
<binding name="L" binding="0"/>
<binding name="R" binding="0"/>
<binding name="Turbo A" binding="0"/>
<binding name="Turbo B" binding="0"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="0"/>
<binding name="Turbo R" binding="0"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="3">
<binding name="Up" binding="0"/>
<binding name="Down" binding="0"/>
<binding name="Left" binding="0"/>
<binding name="Right" binding="0"/>
<binding name="Start" binding="0"/>
<binding name="Select" binding="0"/>
<binding name="A" binding="0"/>
<binding name="B" binding="0"/>
<binding name="X" binding="0"/>
<binding name="Y" binding="0"/>
<binding name="L" binding="0"/>
<binding name="R" binding="0"/>
<binding name="Turbo A" binding="0"/>
<binding name="Turbo B" binding="0"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="0"/>
<binding name="Turbo R" binding="0"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="4">
<binding name="Up" binding="0"/>
<binding name="Down" binding="0"/>
<binding name="Left" binding="0"/>
<binding name="Right" binding="0"/>
<binding name="Start" binding="0"/>
<binding name="Select" binding="0"/>
<binding name="A" binding="0"/>
<binding name="B" binding="0"/>
<binding name="X" binding="0"/>
<binding name="Y" binding="0"/>
<binding name="L" binding="0"/>
<binding name="R" binding="0"/>
<binding name="Turbo A" binding="0"/>
<binding name="Turbo B" binding="0"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="0"/>
<binding name="Turbo R" binding="0"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="5">
<binding name="Up" binding="0"/>
<binding name="Down" binding="0"/>
<binding name="Left" binding="0"/>
<binding name="Right" binding="0"/>
<binding name="Start" binding="0"/>
<binding name="Select" binding="0"/>
<binding name="A" binding="0"/>
<binding name="B" binding="0"/>
<binding name="X" binding="0"/>
<binding name="Y" binding="0"/>
<binding name="L" binding="0"/>
<binding name="R" binding="0"/>
<binding name="Turbo A" binding="0"/>
<binding name="Turbo B" binding="0"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="0"/>
<binding name="Turbo R" binding="0"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="6">
<binding name="Up" binding="0"/>
<binding name="Down" binding="0"/>
<binding name="Left" binding="0"/>
<binding name="Right" binding="0"/>
<binding name="Start" binding="0"/>
<binding name="Select" binding="0"/>
<binding name="A" binding="0"/>
<binding name="B" binding="0"/>
<binding name="X" binding="0"/>
<binding name="Y" binding="0"/>
<binding name="L" binding="0"/>
<binding name="R" binding="0"/>
<binding name="Turbo A" binding="0"/>
<binding name="Turbo B" binding="0"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="0"/>
<binding name="Turbo R" binding="0"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<joypad number="7">
<binding name="Up" binding="0"/>
<binding name="Down" binding="0"/>
<binding name="Left" binding="0"/>
<binding name="Right" binding="0"/>
<binding name="Start" binding="0"/>
<binding name="Select" binding="0"/>
<binding name="A" binding="0"/>
<binding name="B" binding="0"/>
<binding name="X" binding="0"/>
<binding name="Y" binding="0"/>
<binding name="L" binding="0"/>
<binding name="R" binding="0"/>
<binding name="Turbo A" binding="0"/>
<binding name="Turbo B" binding="0"/>
<binding name="Turbo X" binding="0"/>
<binding name="Turbo Y" binding="0"/>
<binding name="Turbo L" binding="0"/>
<binding name="Turbo R" binding="0"/>
<binding name="Sticky A" binding="0"/>
<binding name="Sticky B" binding="0"/>
<binding name="Sticky X" binding="0"/>
<binding name="Sticky Y" binding="0"/>
<binding name="Sticky L" binding="0"/>
<binding name="Sticky R" binding="0"/>
</joypad>
<binding name="GTK_open_rom" binding="0"/>
<binding name="EmuTurbo" binding="268435500"/>
<binding name="ToggleEmuTurbo" binding="268435502"/>
<binding name="GTK_pause" binding="268435488"/>
<binding name="DecFrameRate" binding="556925443"/>
<binding name="IncFrameRate" binding="556925442"/>
<binding name="DecFrameTime" binding="556925440"/>
<binding name="IncFrameTime" binding="556925441"/>
<binding name="Reset" binding="0"/>
<binding name="SoftReset" binding="0"/>
<binding name="GTK_quit" binding="0"/>
<binding name="ToggleBG0" binding="0"/>
<binding name="ToggleBG1" binding="0"/>
<binding name="ToggleBG2" binding="0"/>
<binding name="ToggleBG3" binding="0"/>
<binding name="ToggleSprites" binding="0"/>
<binding name="BGLayeringHack" binding="0"/>
<binding name="Screenshot" binding="0"/>
<binding name="GTK_fullscreen" binding="268500839"/>
<binding name="QuickSave000" binding="556925445"/>
<binding name="QuickSave001" binding="556925447"/>
<binding name="QuickSave002" binding="0"/>
<binding name="QuickSave003" binding="0"/>
<binding name="QuickSave004" binding="0"/>
<binding name="QuickSave005" binding="0"/>
<binding name="QuickSave006" binding="0"/>
<binding name="QuickSave007" binding="0"/>
<binding name="QuickSave008" binding="0"/>
<binding name="QuickLoad000" binding="556925444"/>
<binding name="QuickLoad001" binding="556925446"/>
<binding name="QuickLoad002" binding="0"/>
<binding name="QuickLoad003" binding="0"/>
<binding name="QuickLoad004" binding="0"/>
<binding name="QuickLoad005" binding="0"/>
<binding name="QuickLoad006" binding="0"/>
<binding name="QuickLoad007" binding="0"/>
<binding name="QuickLoad008" binding="0"/>
<binding name="SoundChannel0" binding="0"/>
<binding name="SoundChannel1" binding="0"/>
<binding name="SoundChannel2" binding="0"/>
<binding name="SoundChannel3" binding="0"/>
<binding name="SoundChannel4" binding="0"/>
<binding name="SoundChannel5" binding="0"/>
<binding name="SoundChannel6" binding="0"/>
<binding name="SoundChannel7" binding="0"/>
<binding name="SoundChannelsOn" binding="0"/>
<binding name="InterpolateSound" binding="0"/>
<binding name="GTK_save_spc" binding="0"/>
<binding name="BeginRecordingMovie" binding="0"/>
<binding name="EndRecordingMovie" binding="0"/>
<binding name="LoadMovie" binding="0"/>
<binding name="GTK_seek_to_frame" binding="0"/>
<binding name="GTK_swap_controllers" binding="0"/>
</controls>
</snes9x>
Spongeroberto
Snes9x White Belt
Posts: 2
Joined: Wed Oct 22, 2008 6:16 pm

Re: Loss of POV hat functionality

Post by Spongeroberto »

ectara wrote:Recently, I plugged my Saitek Cyborg P2500 Rumble into my USB port, started up snes9x-gtk, and much to my dismay, my hat did not work. Previously, it was acting as axis #4 and #5, but now it is unrecognised and I can no longer use my d-pad with my games. All other axes and buttons are fine, but I lost use of only the hat. Any known solution? Using the newest version, and a couple legacy versions as well. Joystick is enabled, and I am using the latest binary from the .deb.
Actually, I have the very same problem. Using jstest the d-pad works just fine (as axis 4 and 5 respectively).
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Post by BearOso »

Regarding the joystick problem, see http://www.snes9x.com/phpbb2/viewtopic. ... 5185#25185
If there's still problems after that, let me know. Better hat support is probably needed, and I'll try to get something new out in the next few days to resolve any potential issues.
Spongeroberto wrote:Hey, em... this is might be a lot of work, but eh... could it be possible to give a rom-list on the main screen? Having a library would be so convenient. If you're feeling adventurous you might even use images as well (like gsnes9x)
This is a good idea, and I've thought about something like it before. Given how easy it is to hit File->Open Recent, I can't say I'll implement it before some other needed features/fixes, but it's definitely on the possibility list.
ectara
Snes9x White Belt
Posts: 3
Joined: Sun Jan 18, 2009 4:08 am

Post by ectara »

I had previously uninstalled all joystick calibration applications, removed all configuration files, rebooted, and recalibrated several times. No luck
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Post by BearOso »

ectara wrote:I had previously uninstalled all joystick calibration applications, removed all configuration files, rebooted, and recalibrated several times. No luck
See if version 62 fixes this for you.
Tukuyomi
Snes9x White Belt
Posts: 32
Joined: Mon May 24, 2004 4:14 pm
Location: France

Post by Tukuyomi »

Translating
In order to generate a translation file, you'll need to follow these steps:[...]
Hi BearOso, but is there a way to test the translated .pot file before posting it here? Do I need -and how- to recompile snes9x-gtk everytime the file is modified? Thanks for your replies :)
ectara
Snes9x White Belt
Posts: 3
Joined: Sun Jan 18, 2009 4:08 am

Post by ectara »

Thank you so much for the update! Now I can get back to finishing the games I was playing. (I refuse to use a joystick for the d-pad)
The axis are detected x=5,y=4 instead of how they used to be x=4,y=5, but that is not a problem at all, as it works and it doesn't make a difference in code what order they are. Keep up the good work; I would contribute, but I'm not experienced with GTK, and you appear to have the Joystick issue under control(I use SDL greatly for input).
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Post by BearOso »

Tukuyomi wrote:
Translating
In order to generate a translation file, you'll need to follow these steps:[...]
Hi BearOso, but is there a way to test the translated .pot file before posting it here? Do I need -and how- to recompile snes9x-gtk everytime the file is modified? Thanks for your replies :)
There's a few steps to set it up, but afterward, all you'll need to do is run make install every time you make changes:

1. Edit configure.ac in the gtk directory. On line 23 is

Code: Select all

ALL_LINGUAS=""
Add your language code (es for Spanish, fr for French, de for German, and so on),

Code: Select all

ALL_LINGUAS="es"
2. Make you've renamed the translated translation template to LANGCODE.po, where LANGCODE is the appropriate two-digit language code, and put it in the gtk/po directory.

3. Run the autogen.sh script in the gtk directory, then run configure. After all this, make install will now install the translation file. If your environment is set up for said language, it will use it automatically.

If you have any more questions, let me know.
Tukuyomi
Snes9x White Belt
Posts: 32
Joined: Mon May 24, 2004 4:14 pm
Location: France

Post by Tukuyomi »

http://kuro-hitsuji.net/~tukuyomi/stuff/fr_FR.po.gz

Here, you can find the french locale for Snes9x-gtk version 62 :)

For those interested, if your environment is not set to your native language, you can temporary change the locale used for snes9x-gtk like this:
From a terminal: $ LANG=fr_FR snes9x-gtk (replace fr_FR with the locale code you used in your .po file)
Even if your system is set to English, snes9x-gtk will run in french (in the case fr_FR was installed that is ^^)

Enjoy!
jpeddicord
Snes9x White Belt
Posts: 3
Joined: Thu Jan 29, 2009 7:42 pm

Post by jpeddicord »

Hello,

You're probably sick of hearing from me (Launchpad, mail, bug reports :wink: ) but would it be possible for you to include a note with your patch and/or patched sources that says that your code may also be used/distributed with Snes9x-licensed code? It's related to this:

http://www.snes9x.com/phpbb2/viewtopic. ... 5625#25625

Basically, your GPL code isn't compatible with the Snes9x license, which makes it difficult to redistribute. If you made a note somewhere in your GTK sources, in the headers, or in another file, it would make the whole process a lot easier. All that's really needed is a simple sentence or two: "As an exception to the GPL, this code may be used and distributed with Snes9x and Snes9x-licensed software."

Thanks. :)
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Post by BearOso »

jpeddicord wrote:Hello,

You're probably sick of hearing from me (Launchpad, mail, bug reports :wink: ) but would it be possible for you to include a note with your patch and/or patched sources that says that your code may also be used/distributed with Snes9x-licensed code? It's related to this:

http://www.snes9x.com/phpbb2/viewtopic. ... 5625#25625

Basically, your GPL code isn't compatible with the Snes9x license, which makes it difficult to redistribute. If you made a note somewhere in your GTK sources, in the headers, or in another file, it would make the whole process a lot easier. All that's really needed is a simple sentence or two: "As an exception to the GPL, this code may be used and distributed with Snes9x and Snes9x-licensed software."

Thanks. :)
I've relicensed to LGPL, and have included your suggested exception statement in version 63. It's in gtk/doc/LICENSE.
jpeddicord
Snes9x White Belt
Posts: 3
Joined: Thu Jan 29, 2009 7:42 pm

Post by jpeddicord »

Thanks. :)

That brings it all one major step closer. Once the other issue with the Snes9x source/license itself is resolved this is all in the clear.
Kernigh
Snes9x White Belt
Posts: 2
Joined: Thu Feb 05, 2009 6:50 pm

OpenBSD

Post by Kernigh »

I tried version 63 of this GTK+/X11 port on my computer. My processor is PowerPC and my operating system is OpenBSD 4.4-current. Here is my experience.

First, the configure script has some trouble finding dependencies. OpenBSD puts X11R7 in /usr/X11R6 and packages in /usr/local, and the compiler needs -I and -L flags to look there. Also png.h is at a strange place. The config scripts know about this:

Code: Select all

$ libpng-config --cflags
-I/usr/local/include/libpng
$ pkg-config x11 --cflags
-I/usr/X11R6/include
$ sdl-config --libs
-L/usr/local/lib -lSDL -pthread -L/usr/X11R6/lib -R/usr/X11R6/lib
But the configure script does not use all these config scripts, so I had to use an especially long configure line:

Code: Select all

./configure --prefix=$HOME/prefix --with-debug CPPFLAGS="`libpng-config --cflags` `pkg-config x11 --cflags`" LDFLAGS="-L/usr/local/lib -L/usr/X11R6/lib -pthread"
I added --with-debug later. I purposely did not give --with-opengl, because I do not have OpenGL acceleration.

With configure done, I used make and make install as normal. Then I started the emulator, but the emulator crashed and dumped core! The first backtrace from gdb showed that emulator called glade_xml_new_from_buffer which called g_free which called libc free which aborted on a "bogus pointer". I decided to try to fix this problem. I rebuilt snes9x-gtk using --with-debug for a better backtrace. However, the crash seemed to be in libglade, so I wondered if my libglade would be broken. I ran a program called galculator to verify that libglade works. I still wanted debugging info in libglade, so I deinstalled libglade, hacked the OpenBSD ports tree to build libglade with -g, and installed a new copy of /usr/local/lib/libglade-2.0.so.1.0. Finally I discovered the problem.

I ordered gdb to break at glade_xml_new_from_buffer, and saw that buffer contained a string of XML but size was zero. When I told gdb to print size=strlen(buffer) and continue, snes9x-gtk temporarily worked! So I looked back through the source code of snes9x-gtk to find where the size was zero. I found this code in gtk_glade.cpp:

Code: Select all

int snes9x_glade_size = 0;

char snes9x_glade [] =
{
    60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, 110, 61,
    ...
This was the source of the size of zero. Then I guessed that some reswrap-like program generated this file, so I searched Makefile, and found that sourcify makes this. So the next step was to look in sourcify.c, for a bug that sets the size to zero instead of the actual size. I found this code:

Code: Select all

stat (argv[1], &file_info);
...
fprintf (outfile, "int %s_size = %d;\n\n", argv[3], file_info.st_size);
I did man 2 stat to check that file_info.st_size is the size of the file. There I found the problem: file_info.st_size has type off_t, but %d wants type int. There is no type conversion because fprintf takes variable arguments.

OpenBSD supports large files, so off_t is 64 bits, but int is only 32 bits. My PowerPC is big-endian, so the big end (zero) comes before the little end (the actual size), and that was the zero that crashed snes9x-gtk. So I changed line 31 of src/sourcify.c to use a cast:

Code: Select all

fprintf (outfile, "int %s_size = %d;\n\n", argv[3], (int)file_info.st_size);
fprintf (outfile, "int %s_size = %d;\n\n", argv[3], (int)file_info.st_size);

I did make and make install again, and the bug died.

Code: Select all

int snes9x_glade_size = 404935;

char snes9x_glade [] =
{
    60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, 110, 61,
    ...
I started snes9x-gtk and it did not crash. After I set a bunch of preferences, I had a good game of Super Mario World. With a long enough configure line and this small bug fix, snes9x-gtk is ready to run above OpenBSD.

Please fix this bug in the next version. Put an (int) cast like I did above (which should work if the size fits an int) or otherwise match the types. Advance thank you.
User avatar
BearOso
Official GTK/Linux Porter/Dev
Posts: 460
Joined: Tue Oct 02, 2007 12:50 am

Re: OpenBSD

Post by BearOso »

Kernigh wrote: Please fix this bug in the next version. Put an (int) cast like I did above (which should work if the size fits an int) or otherwise match the types. Advance thank you.
Thanks for doing the debugging to find this bug. Version 64 should work properly. I've added a few new pkg-config macros for x11 and libpng, so hopefully that simplifies your configure line. The build already uses sdl-config, so I think that should be OK. If you still get problems with SDL, I can switch that to pkg-config, but sdl.pc only comes with more recent SDL releases, so that might exclude some people.
Ezekiel000
Snes9x White Belt
Posts: 12
Joined: Sat Feb 07, 2009 7:08 pm

Post by Ezekiel000 »

This gui is great, I've always stayed away from snes9x because of the Linux gui's.

But I have found that the disable screensaver option doesn't work for me.
Edit: Nevermind it doesn't seem to happen any more.
Edit2: It's not the screensaver cutting in that's the problem it's the power management that turns off the screen.
Edit3: This is getting silly, anyway it's not the power management as I disabled turning off the screen.

But I am getting a segfault when I try to load a saved state.

I'm using your launchpad Ubuntu 8.10 amd64 deb.
D--
Snes9x White Belt
Posts: 11
Joined: Mon Feb 09, 2009 10:11 am
Location: Beijing, China

Re: GTK/X11 Port (aka Linux/UNIX GUI)

Post by D-- »

Hi, just wanted to let you know that your snes9x-gtk fails to link on Loongson 2F architecture. I attempted to build it using your repository and apt-get --compile source.

I have provided the output below. This is a second run which is why you only see the link step, if you want me to log a full attempt at compiling let me know and I will post it to pastebin.

Code: Select all

d@medan:~$ apt-get --compile source snes9x-gtk
Reading package lists...
Building dependency tree...
Reading state information...
dpkg-buildpackage: set CFLAGS to default value: -g -O2
dpkg-buildpackage: set CPPFLAGS to default value: 
dpkg-buildpackage: set LDFLAGS to default value: 
dpkg-buildpackage: set FFLAGS to default value: -g -O2
dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
dpkg-buildpackage: source package snes9x-gtk
dpkg-buildpackage: source version 1.51.64-1
dpkg-buildpackage: source changed by Brandon Wright <bearoso@gmail.com>
dpkg-buildpackage: host architecture mipsel
 fakeroot debian/rules clean
test -f debian/rules
rm -f build
rm -rf *~ debian/tmp debian/*~ debian/files* debian/substvars
 debian/rules build
test -f debian/rules
cd gtk && ./configure --prefix=/usr --with-gtk --with-opengl --with-joystick --with-netplay && /usr/bin/make CC="cc"
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for ranlib... ranlib
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking dependency style of g++... gcc3
checking whether gcc and cc understand -c and -o together... yes
checking whether NLS is requested... yes
checking for intltool >= 0.23... 0.40.0 found
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for perl... /usr/bin/perl
checking for XML::Parser... ok
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for LC_MESSAGES... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for ngettext in libc... yes
checking for dgettext in libc... yes
checking for bind_textdomain_codeset... yes
checking for msgfmt... (cached) /usr/bin/msgfmt
checking for dcgettext... yes
checking if msgfmt accepts -c... yes
checking for gmsgfmt... (cached) /usr/bin/msgfmt
checking for xgettext... (cached) /usr/bin/xgettext
checking for catalogs to be installed...  fr_FR
checking for SDL_Init in -lSDL... yes
checking for XvQueryExtension in -lXv... yes
checking for XRRQueryExtension in -lXrandr... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for GTK... yes
checking for GLIB... yes
checking for GLADE... yes
checking for LIBXML... yes
checking for PORTAUDIO... yes
checking for GTKGL... yes
checking for X11... yes
checking for LIBPNG... yes
checking if the CPU is IA32... checking for nasm... /usr/bin/nasm
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for gzread in -lz... yes
checking for png_init_io in -lpng... yes
checking for mkstemp... yes
checking for strings.h... (cached) yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking for stdint.h... (cached) yes
checking if sizeof(void *) == sizeof(int)... yes
checking if rightshift int8 is arithmetic... yes
checking if rightshift int16 is arithmetic... yes
checking if rightshift int32 is arithmetic... yes
checking if rightshift int64 is arithmetic... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating data/Makefile
config.status: creating po/Makefile.in
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: executing po/stamp-it commands
# INTLTOOL_MAKEFILE

Snes9x will build with support for the following:

    OpenGL
    XVideo
    XRandR
    Joysticks
    NetPlay

make[1]: Entering directory `/home/d/snes9x-gtk-1.51.64/gtk'
Making all in data
make[2]: Entering directory `/home/d/snes9x-gtk-1.51.64/gtk/data'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/d/snes9x-gtk-1.51.64/gtk/data'
Making all in po
make[2]: Entering directory `/home/d/snes9x-gtk-1.51.64/gtk/po'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/d/snes9x-gtk-1.51.64/gtk/po'
make[2]: Entering directory `/home/d/snes9x-gtk-1.51.64/gtk'
g++ -fno-exceptions -fno-rtti -O2 -fomit-frame-pointer -Wall -W -pedantic -Wno-unused-parameter -pipe -g -O2 -DUSE_JOYSTICK -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DUSE_XV -DUSE_XRANDR -DUSE_OPENGL   -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/pixman-1   -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -D_REENTRANT -I/usr/include/libglade-2.0 -I/usr/include/gtk-2.0 -I/usr/include/libxml2 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/pixman-1   -I/usr/include/libxml2   -pthread   -D_REENTRANT -I/usr/include/gtkglext-1.0 -I/usr/lib/gtkglext-1.0/include -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/pixman-1 -I/usr/include/atk-1.0   -I/usr/include/libpng12   -DCORRECT_VRAM_READS -DSDD1_DECOMP -DNETPLAY_SUPPORT -DJMA_SUPPORT -DNEW_COLOUR_BLENDING -DZLIB -DHAVE_LIBPNG -DHAVE_MKSTEMP -DHAVE_STRINGS_H -DHAVE_SYS_IOCTL_H -DHAVE_STDINT_H -DRIGHTSHIFT_int8_IS_SAR -DRIGHTSHIFT_int16_IS_SAR -DRIGHTSHIFT_int32_IS_SAR -DRIGHTSHIFT_int64_IS_SAR -DRIGHTSHIFT_IS_SAR -DCPU_SHUTDOWN -DSPC700_SHUTDOWN -DNO_INLINE_SET_GET -DUNZIP_SUPPORT -DSPC700_C -I. -I.. -I../unzip  -L/usr/lib -lSDL -lXv -lXext -lXext -lXrandr -lX11   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0   -pthread -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0   -lglade-2.0 -lgtk-x11-2.0 -lxml2 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0   -lxml2   -lportaudio -lm -lpthread   -Wl,--export-dynamic -lgtkglext-x11-1.0 -lgdkglext-x11-1.0 -lGLU -lGL -lXmu -lXt -lSM -lICE -lgtk-x11-2.0 -lpangox-1.0 -lX11 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0   -lpng12   -lz -lpng -o snes9x-gtk snes9x_gtk-filter_2xsai.o snes9x_gtk-filter_epx.o snes9x_gtk-filter_hq2x.o snes9x_gtk-gtk_binding.o snes9x_gtk-gtk_cheat.o snes9x_gtk-gtk_config.o snes9x_gtk-gtk_control.o snes9x_gtk-gtk_display.o snes9x_gtk-gtk_display_driver_gtk.o snes9x_gtk-gtk_file.o snes9x_gtk-gtk_glade.o snes9x_gtk-gtk_glade_window.o snes9x_gtk-gtk_preferences.o snes9x_gtk-gtk_s9x.o snes9x_gtk-gtk_s9xwindow.o snes9x_gtk-gtk_sound.o snes_ntsc.o  snes9x_gtk-fxinst.o snes9x_gtk-fxemu.o snes9x_gtk-fxdbg.o  snes9x_gtk-c4.o snes9x_gtk-c4emu.o snes9x_gtk-spc700.o snes9x_gtk-soundux.o snes9x_gtk-apu.o snes9x_gtk-spc7110.o snes9x_gtk-obc1.o snes9x_gtk-seta.o snes9x_gtk-seta010.o snes9x_gtk-seta011.o snes9x_gtk-seta018.o snes9x_gtk-apudebug.o snes9x_gtk-controls.o snes9x_gtk-crosshairs.o snes9x_gtk-cpu.o snes9x_gtk-sa1.o snes9x_gtk-debug.o snes9x_gtk-sdd1.o snes9x_gtk-tile.o snes9x_gtk-srtc.o snes9x_gtk-gfx.o snes9x_gtk-memmap.o snes9x_gtk-clip.o snes9x_gtk-dsp1.o snes9x_gtk-ppu.o snes9x_gtk-dma.o snes9x_gtk-snes9x.o snes9x_gtk-data.o snes9x_gtk-globals.o snes9x_gtk-reader.o snes9x_gtk-conffile.o snes9x_gtk-bsx.o snes9x_gtk-logger.o snes9x_gtk-snaporig.o snes9x_gtk-snapshot.o snes9x_gtk-screenshot.o snes9x_gtk-movie.o snes9x_gtk-cpuops.o snes9x_gtk-cpuexec.o snes9x_gtk-sa1cpu.o snes9x_gtk-cheats.o snes9x_gtk-cheats2.o snes9x_gtk-sdd1emu.o snes9x_gtk-netplay.o snes9x_gtk-server.o snes9x_gtk-loadzip.o unzip.o explode.o unreduce.o unshrink.o snes9x_gtk-gtk_display_driver_opengl.o snes9x_gtk-gtk_display_driver_xv.o snes9x_gtk-gtk_netplay_dialog.o snes9x_gtk-gtk_netplay.o libjma.a 
/usr/bin/ld: non-dynamic relocations refer to dynamic symbol area
/usr/bin/ld: failed to set dynamic section sizes: Bad value
collect2: ld returned 1 exit status
make[2]: *** [snes9x-gtk] Error 1
make[2]: Leaving directory `/home/d/snes9x-gtk-1.51.64/gtk'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/d/snes9x-gtk-1.51.64/gtk'
make: *** [build] Error 2
dpkg-buildpackage: failure: debian/rules build gave error exit status 2
Build command 'cd snes9x-gtk-1.51.64 && dpkg-buildpackage -b -uc' failed.
Skipping already downloaded file 'snes9x-gtk_1.51.64-1.tar.gz'
Skipping already downloaded file 'snes9x-gtk_1.51.64-1.dsc'
Need to get 0B of source archives.
E: Child process failed
Below is my gcc/g++ and ld information:

Code: Select all

d@medan:~$ ld -v
GNU ld (GNU Binutils for Debian) 2.19
d@medan:~$ gcc -v
Using built-in specs.
Target: mipsel-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.2-1.1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --disable-libssp --enable-checking=release --build=mipsel-linux-gnu --host=mipsel-linux-gnu --target=mipsel-linux-gnu
Thread model: posix
gcc version 4.3.2 (Debian 4.3.2-1.1) 
d@medan:~$ g++ -v
Using built-in specs.
Target: mipsel-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.2-1.1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --disable-libssp --enable-checking=release --build=mipsel-linux-gnu --host=mipsel-linux-gnu --target=mipsel-linux-gnu
Thread model: posix
gcc version 4.3.2 (Debian 4.3.2-1.1) 
I hope this can be fixed. A lot of great new UMPCs are coming out for this architecture and the only SNES emulator that compiles is the old, no-gui version of Snes9x.
Post Reply