p4ruby 2017.1.1699426-x64-mingw32 → 2021.1.2156749-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE.txt +451 -20
- data/README.md +3 -879
- data/ext/P4/clientprogressruby.cpp +0 -1
- data/ext/P4/clientuserruby.cpp +155 -0
- data/ext/P4/clientuserruby.h +44 -0
- data/ext/P4/extconf.rb +69 -13
- data/ext/P4/p4.cpp +84 -9
- data/ext/P4/p4clientapi.cpp +64 -6
- data/ext/P4/p4clientapi.h +11 -2
- data/ext/P4/p4result.cpp +1 -0
- data/ext/P4/p4specdata.cpp +29 -0
- data/ext/P4/p4specdata.h +2 -0
- data/ext/P4/specmgr.cpp +63 -89
- data/lib/2.6/P4.so +0 -0
- data/lib/2.7/P4.so +0 -0
- data/lib/3.0/P4.so +0 -0
- data/lib/P4.rb +1 -1
- data/lib/P4.so +0 -0
- data/lib/P4/version.rb +3 -3
- metadata +15 -16
- data/lib/2.0/P4.so +0 -0
- data/lib/2.1/P4.so +0 -0
- data/lib/2.2/P4.so +0 -0
- data/lib/2.3/P4.so +0 -0
- data/lib/2.4/P4.so +0 -0
    
        data/ext/P4/clientuserruby.cpp
    CHANGED
    
    | @@ -38,6 +38,7 @@ | |
| 38 38 | 
             
            #include <ruby.h>
         | 
| 39 39 | 
             
            #include "undefdups.h"
         | 
| 40 40 | 
             
            #include <p4/clientapi.h>
         | 
| 41 | 
            +
            #include <p4/strtable.h>
         | 
| 41 42 | 
             
            #include <p4/clientprog.h>
         | 
| 42 43 | 
             
            #include <p4/spec.h>
         | 
| 43 44 | 
             
            #include <p4/diff.h>
         | 
| @@ -77,6 +78,7 @@ ClientUserRuby::ClientUserRuby(SpecMgr *s) { | |
| 77 78 | 
             
            	rubyExcept = 0;
         | 
| 78 79 | 
             
            	alive = 1;
         | 
| 79 80 | 
             
            	track = false;
         | 
| 81 | 
            +
                SetSSOHandler( ssoHandler = new P4ClientSSO( s ) );
         | 
| 80 82 |  | 
| 81 83 | 
             
            	ID idP4 = rb_intern("P4");
         | 
| 82 84 | 
             
            	ID idP4OH = rb_intern("OutputHandler");
         | 
| @@ -723,4 +725,157 @@ void ClientUserRuby::GCMark() { | |
| 723 725 | 
             
            	rb_gc_mark( cProgress );
         | 
| 724 726 |  | 
| 725 727 | 
             
            	results.GCMark();
         | 
| 728 | 
            +
            	ssoHandler->GCMark();
         | 
| 726 729 | 
             
            }
         | 
| 730 | 
            +
             | 
| 731 | 
            +
            //
         | 
| 732 | 
            +
            // SSO handler
         | 
| 733 | 
            +
            //
         | 
| 734 | 
            +
             | 
| 735 | 
            +
            P4ClientSSO::P4ClientSSO( SpecMgr *s )
         | 
| 736 | 
            +
            {
         | 
| 737 | 
            +
                specMgr = s;
         | 
| 738 | 
            +
                resultSet = 0;
         | 
| 739 | 
            +
                ssoEnabled = 0;
         | 
| 740 | 
            +
                result = Qnil;
         | 
| 741 | 
            +
            }
         | 
| 742 | 
            +
             | 
| 743 | 
            +
            ClientSSOStatus
         | 
| 744 | 
            +
            P4ClientSSO::Authorize( StrDict &vars, int maxLength, StrBuf &strbuf )
         | 
| 745 | 
            +
            {
         | 
| 746 | 
            +
                ssoVars.Clear();
         | 
| 747 | 
            +
             | 
| 748 | 
            +
                if( !ssoEnabled )
         | 
| 749 | 
            +
                    return CSS_SKIP;
         | 
| 750 | 
            +
             | 
| 751 | 
            +
                if( ssoEnabled < 0 )
         | 
| 752 | 
            +
                    return CSS_UNSET;
         | 
| 753 | 
            +
             | 
| 754 | 
            +
                if( resultSet )
         | 
| 755 | 
            +
                {
         | 
| 756 | 
            +
                    strbuf.Clear();
         | 
| 757 | 
            +
            		VALUE resval = result;
         | 
| 758 | 
            +
             | 
| 759 | 
            +
                    //if( P4RDB_CALLS )
         | 
| 760 | 
            +
                    //    std::cerr << "[P4] ClientSSO::Authorize(). Using supplied input"
         | 
| 761 | 
            +
                    //              << std::endl;
         | 
| 762 | 
            +
             | 
| 763 | 
            +
            		if (Qtrue == rb_obj_is_kind_of(result, rb_cArray)) {
         | 
| 764 | 
            +
            			resval = rb_ary_shift(result);
         | 
| 765 | 
            +
            		}
         | 
| 766 | 
            +
            	
         | 
| 767 | 
            +
            		if( resval != Qnil ) {
         | 
| 768 | 
            +
            			// Convert whatever's left into a string
         | 
| 769 | 
            +
            			ID to_s = rb_intern("to_s");
         | 
| 770 | 
            +
            			VALUE str = rb_funcall(resval, to_s, 0);
         | 
| 771 | 
            +
            			strbuf.Set(StringValuePtr(str));
         | 
| 772 | 
            +
            		}
         | 
| 773 | 
            +
             | 
| 774 | 
            +
                    return resultSet == 2 ? CSS_FAIL
         | 
| 775 | 
            +
                                          : CSS_PASS;
         | 
| 776 | 
            +
                }
         | 
| 777 | 
            +
             | 
| 778 | 
            +
                ssoVars.CopyVars( vars );
         | 
| 779 | 
            +
                return CSS_EXIT;
         | 
| 780 | 
            +
            }
         | 
| 781 | 
            +
             | 
| 782 | 
            +
            VALUE
         | 
| 783 | 
            +
            P4ClientSSO::EnableSSO( VALUE e )
         | 
| 784 | 
            +
            {
         | 
| 785 | 
            +
                if( e == Qnil )
         | 
| 786 | 
            +
                {
         | 
| 787 | 
            +
                    ssoEnabled = 0;
         | 
| 788 | 
            +
                    return Qtrue;
         | 
| 789 | 
            +
                }
         | 
| 790 | 
            +
             | 
| 791 | 
            +
                if( e == Qtrue )
         | 
| 792 | 
            +
                {
         | 
| 793 | 
            +
                    ssoEnabled = 1;
         | 
| 794 | 
            +
                    return Qtrue;
         | 
| 795 | 
            +
                }
         | 
| 796 | 
            +
             | 
| 797 | 
            +
                if( e == Qfalse )
         | 
| 798 | 
            +
                {
         | 
| 799 | 
            +
                    ssoEnabled = -1;
         | 
| 800 | 
            +
                    return Qtrue;
         | 
| 801 | 
            +
                }
         | 
| 802 | 
            +
             | 
| 803 | 
            +
            	return Qfalse;
         | 
| 804 | 
            +
            }
         | 
| 805 | 
            +
             | 
| 806 | 
            +
            VALUE
         | 
| 807 | 
            +
            P4ClientSSO::SSOEnabled()
         | 
| 808 | 
            +
            {
         | 
| 809 | 
            +
                if( ssoEnabled == 1 )
         | 
| 810 | 
            +
                {
         | 
| 811 | 
            +
                    return Qtrue;
         | 
| 812 | 
            +
                }
         | 
| 813 | 
            +
                else if( ssoEnabled == -1 )
         | 
| 814 | 
            +
                {
         | 
| 815 | 
            +
                    return Qfalse;
         | 
| 816 | 
            +
                }
         | 
| 817 | 
            +
                else
         | 
| 818 | 
            +
                {
         | 
| 819 | 
            +
                    return Qnil;
         | 
| 820 | 
            +
                }
         | 
| 821 | 
            +
            }
         | 
| 822 | 
            +
             | 
| 823 | 
            +
            VALUE
         | 
| 824 | 
            +
            P4ClientSSO::SetPassResult( VALUE i )
         | 
| 825 | 
            +
            {
         | 
| 826 | 
            +
                resultSet = 1;
         | 
| 827 | 
            +
                return SetResult( i );
         | 
| 828 | 
            +
            }
         | 
| 829 | 
            +
             | 
| 830 | 
            +
            VALUE
         | 
| 831 | 
            +
            P4ClientSSO::GetPassResult()
         | 
| 832 | 
            +
            {
         | 
| 833 | 
            +
                if( resultSet == 1 )
         | 
| 834 | 
            +
                {
         | 
| 835 | 
            +
                    return result;
         | 
| 836 | 
            +
                }
         | 
| 837 | 
            +
                else
         | 
| 838 | 
            +
                {
         | 
| 839 | 
            +
                    return Qnil;
         | 
| 840 | 
            +
                }
         | 
| 841 | 
            +
            }
         | 
| 842 | 
            +
             | 
| 843 | 
            +
            VALUE
         | 
| 844 | 
            +
            P4ClientSSO::SetFailResult( VALUE i )
         | 
| 845 | 
            +
            {
         | 
| 846 | 
            +
                resultSet = 2;
         | 
| 847 | 
            +
                return SetResult( i );
         | 
| 848 | 
            +
            }
         | 
| 849 | 
            +
             | 
| 850 | 
            +
            VALUE
         | 
| 851 | 
            +
            P4ClientSSO::GetFailResult()
         | 
| 852 | 
            +
            {
         | 
| 853 | 
            +
                if( resultSet == 2 )
         | 
| 854 | 
            +
                {
         | 
| 855 | 
            +
                    return result;
         | 
| 856 | 
            +
                }
         | 
| 857 | 
            +
                else
         | 
| 858 | 
            +
                {
         | 
| 859 | 
            +
                    return Qnil;
         | 
| 860 | 
            +
                }
         | 
| 861 | 
            +
            }
         | 
| 862 | 
            +
             | 
| 863 | 
            +
            VALUE
         | 
| 864 | 
            +
            P4ClientSSO::SetResult( VALUE i )
         | 
| 865 | 
            +
            {
         | 
| 866 | 
            +
            	//if (P4RDB_CALLS) fprintf(stderr, "[P4] P4ClientSSO::SetResult()\n");
         | 
| 867 | 
            +
             
         | 
| 868 | 
            +
            	result = i;
         | 
| 869 | 
            +
            	return Qtrue;
         | 
| 870 | 
            +
            }
         | 
| 871 | 
            +
             | 
| 872 | 
            +
            VALUE
         | 
| 873 | 
            +
            P4ClientSSO::GetSSOVars()
         | 
| 874 | 
            +
            {
         | 
| 875 | 
            +
                return specMgr->StrDictToHash( &ssoVars );
         | 
| 876 | 
            +
            }
         | 
| 877 | 
            +
             | 
| 878 | 
            +
            void
         | 
| 879 | 
            +
            P4ClientSSO::GCMark() {
         | 
| 880 | 
            +
            	if (result != Qnil) rb_gc_mark( result );
         | 
| 881 | 
            +
            }
         | 
    
        data/ext/P4/clientuserruby.h
    CHANGED
    
    | @@ -42,6 +42,39 @@ | |
| 42 42 | 
             
            class SpecMgr;
         | 
| 43 43 | 
             
            class ClientProgress;
         | 
| 44 44 |  | 
| 45 | 
            +
            class P4ClientSSO : public ClientSSO
         | 
| 46 | 
            +
            {
         | 
| 47 | 
            +
                public:
         | 
| 48 | 
            +
                    P4ClientSSO( SpecMgr *s );
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                // Client SSO methods overridden here
         | 
| 51 | 
            +
                virtual ClientSSOStatus Authorize( StrDict &vars, int maxLength,
         | 
| 52 | 
            +
                                                   StrBuf &result );
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                // Local methods
         | 
| 55 | 
            +
                VALUE EnableSSO( VALUE e );
         | 
| 56 | 
            +
                VALUE SSOEnabled();
         | 
| 57 | 
            +
                VALUE SetPassResult( VALUE i );
         | 
| 58 | 
            +
                VALUE GetPassResult();
         | 
| 59 | 
            +
                VALUE SetFailResult( VALUE i );
         | 
| 60 | 
            +
                VALUE GetFailResult();
         | 
| 61 | 
            +
                VALUE GetSSOVars();
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            	void GCMark();
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                private:
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                VALUE SetResult( VALUE i );
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                int         ssoEnabled;
         | 
| 70 | 
            +
                int         resultSet;
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                StrBufDict  ssoVars;
         | 
| 73 | 
            +
                SpecMgr *   specMgr;
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                VALUE       result;
         | 
| 76 | 
            +
            };
         | 
| 77 | 
            +
             | 
| 45 78 | 
             
            class ClientUserRuby: public ClientUser, public KeepAlive {
         | 
| 46 79 | 
             
            public:
         | 
| 47 80 | 
             
            	ClientUserRuby(SpecMgr *s);
         | 
| @@ -101,6 +134,16 @@ public: | |
| 101 134 | 
             
            		return progress;
         | 
| 102 135 | 
             
            	}
         | 
| 103 136 |  | 
| 137 | 
            +
            	// SSO handler support
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                VALUE EnableSSO( VALUE e )        { return ssoHandler->EnableSSO( e ); }
         | 
| 140 | 
            +
                VALUE SSOEnabled()   { return ssoHandler->SSOEnabled(); }
         | 
| 141 | 
            +
                VALUE SetSSOPassResult( VALUE i ) { return ssoHandler->SetPassResult( i ); }
         | 
| 142 | 
            +
                VALUE GetSSOPassResult(){ return ssoHandler->GetPassResult();}
         | 
| 143 | 
            +
                VALUE SetSSOFailResult( VALUE i ) { return ssoHandler->SetFailResult( i ); }
         | 
| 144 | 
            +
                VALUE GetSSOFailResult(){ return ssoHandler->GetFailResult();}
         | 
| 145 | 
            +
                VALUE GetSSOVars()  { return ssoHandler->GetSSOVars(); }
         | 
| 146 | 
            +
             | 
| 104 147 | 
             
            	// override from KeepAlive
         | 
| 105 148 | 
             
            	virtual int IsAlive() {
         | 
| 106 149 | 
             
            		return alive;
         | 
| @@ -129,5 +172,6 @@ private: | |
| 129 172 | 
             
            	int alive;
         | 
| 130 173 | 
             
            	int rubyExcept;
         | 
| 131 174 | 
             
            	bool track;
         | 
| 175 | 
            +
                P4ClientSSO * ssoHandler;
         | 
| 132 176 | 
             
            };
         | 
| 133 177 |  | 
    
        data/ext/P4/extconf.rb
    CHANGED
    
    | @@ -6,10 +6,19 @@ require 'mkmf' | |
| 6 6 | 
             
            require 'net/ftp'
         | 
| 7 7 | 
             
            require 'P4/version'
         | 
| 8 8 | 
             
            require 'rbconfig'
         | 
| 9 | 
            +
            require 'openssl'
         | 
| 9 10 |  | 
| 10 11 | 
             
            # Set this to the main version directory we look up in ftp.perforce.com for the P4API
         | 
| 11 12 | 
             
            # This is ignored if you specify the version on the command line.
         | 
| 12 | 
            -
             | 
| 13 | 
            +
            # Changed the hardcoded string so that the version is now derived from version.rb file
         | 
| 14 | 
            +
            #P4API_VERSION_DIR = 'r19.1'
         | 
| 15 | 
            +
            def p4api_version_dir
         | 
| 16 | 
            +
                    ver=P4::Version.split(".")
         | 
| 17 | 
            +
                    p4_major = ver[0].chars.last(2).join
         | 
| 18 | 
            +
                    p4_minor = ver[1]
         | 
| 19 | 
            +
                    dir = "r" + p4_major + "." + p4_minor
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 13 22 |  | 
| 14 23 | 
             
            #==============================================================================
         | 
| 15 24 | 
             
            # Provide platform variables in P4-specific format
         | 
| @@ -102,6 +111,15 @@ def calculate_p4osver | |
| 102 111 | 
             
              return ver
         | 
| 103 112 | 
             
            end
         | 
| 104 113 |  | 
| 114 | 
            +
            def gcc
         | 
| 115 | 
            +
              @gcc ||= calculate_gcc
         | 
| 116 | 
            +
            end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            def calculate_gcc
         | 
| 119 | 
            +
              gcc = RbConfig::CONFIG["GCC"]
         | 
| 120 | 
            +
              return gcc
         | 
| 121 | 
            +
            end
         | 
| 122 | 
            +
             | 
| 105 123 | 
             
            def uname_platform
         | 
| 106 124 | 
             
              @uname_platform ||= calculate_uname_platform
         | 
| 107 125 | 
             
            end
         | 
| @@ -155,6 +173,13 @@ def set_platform_opts | |
| 155 173 | 
             
              end
         | 
| 156 174 | 
             
            end
         | 
| 157 175 |  | 
| 176 | 
            +
            def set_platform_cxxflags
         | 
| 177 | 
            +
              if (p4osname == 'LINUX') && (gcc == 'yes')
         | 
| 178 | 
            +
                $CXXFLAGS += " -std=c++11 "
         | 
| 179 | 
            +
              end
         | 
| 180 | 
            +
            end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
             | 
| 158 183 | 
             
            def set_platform_cppflags
         | 
| 159 184 | 
             
              $CPPFLAGS += "-DOS_#{p4osname} "
         | 
| 160 185 | 
             
              $CPPFLAGS += "-DOS_#{p4osname}#{p4osver} "
         | 
| @@ -214,6 +239,7 @@ def set_platform_libs | |
| 214 239 | 
             
                    $LDFLAGS += ' -framework CoreFoundation -framework Foundation'
         | 
| 215 240 | 
             
                  end
         | 
| 216 241 | 
             
                when 'LINUX', 'MINGW32'
         | 
| 242 | 
            +
                  $LDFLAGS += ' -Wl,--allow-multiple-definition'
         | 
| 217 243 | 
             
                  have_library('supc++')
         | 
| 218 244 | 
             
              end
         | 
| 219 245 | 
             
            end
         | 
| @@ -399,6 +425,8 @@ def p4_cpu(os) | |
| 399 425 | 
             
                when :darwin, :linux
         | 
| 400 426 | 
             
                  if cpu =~ /i686/
         | 
| 401 427 | 
             
                    'x86'
         | 
| 428 | 
            +
                  elsif cpu =~ /universal/
         | 
| 429 | 
            +
                    'x86_64'
         | 
| 402 430 | 
             
                  else
         | 
| 403 431 | 
             
                    cpu
         | 
| 404 432 | 
             
                  end
         | 
| @@ -425,7 +453,9 @@ def p4_platform_label | |
| 425 453 | 
             
                  else
         | 
| 426 454 | 
             
                    'mingwx86'
         | 
| 427 455 | 
             
                  end
         | 
| 428 | 
            -
                when /darwin/
         | 
| 456 | 
            +
                when /darwin19|darwin[2-9][0-9]/
         | 
| 457 | 
            +
                  "macosx1015#{p4_cpu(:darwin)}"
         | 
| 458 | 
            +
                when /darwin/      
         | 
| 429 459 | 
             
                  "darwin90#{p4_cpu(:darwin)}"
         | 
| 430 460 | 
             
                when /solaris/
         | 
| 431 461 | 
             
                  "solaris10#{p4_cpu(:solaris)}"
         | 
| @@ -445,13 +475,36 @@ def ftp_download_dir(version) | |
| 445 475 | 
             
            end
         | 
| 446 476 |  | 
| 447 477 | 
             
            def filename
         | 
| 478 | 
            +
              openssl_number = OpenSSL::OPENSSL_VERSION.split(' ')[1].to_s
         | 
| 479 | 
            +
              openssl_number = openssl_number.slice(0, (openssl_number.rindex('.')))
         | 
| 480 | 
            +
             | 
| 448 481 | 
             
              if RbConfig::CONFIG['target_os'].downcase =~ /nt|mswin|mingw/
         | 
| 449 | 
            -
                'p4api.zip'
         | 
| 482 | 
            +
                filename = 'p4api.zip'
         | 
| 483 | 
            +
                if !openssl_number.to_s.empty?
         | 
| 484 | 
            +
                    case openssl_number.to_s
         | 
| 485 | 
            +
                        when /1.1/
         | 
| 486 | 
            +
                            filename = 'p4api-openssl1.1.1.zip'
         | 
| 487 | 
            +
                        when /1.0/
         | 
| 488 | 
            +
                            filename = 'p4api-openssl1.0.2.zip'
         | 
| 489 | 
            +
                         end
         | 
| 490 | 
            +
                end
         | 
| 491 | 
            +
              elsif RbConfig::CONFIG['target_os'].downcase =~ /darwin19|darwin[2-9][0-9]/
         | 
| 492 | 
            +
                filename = 'p4api-openssl1.1.1.tgz'
         | 
| 450 493 | 
             
              else
         | 
| 451 | 
            -
                'p4api.tgz'
         | 
| 494 | 
            +
                filename = 'p4api.tgz'
         | 
| 495 | 
            +
                if !openssl_number.to_s.empty?
         | 
| 496 | 
            +
                    case openssl_number.to_s
         | 
| 497 | 
            +
                        when /1.1/
         | 
| 498 | 
            +
                            filename = 'p4api-glibc2.3-openssl1.1.1.tgz'
         | 
| 499 | 
            +
                        when /1.0/
         | 
| 500 | 
            +
                            filename = 'p4api-glibc2.3-openssl1.0.2.tgz'
         | 
| 501 | 
            +
                    end
         | 
| 502 | 
            +
                end
         | 
| 452 503 | 
             
              end
         | 
| 504 | 
            +
              return filename
         | 
| 453 505 | 
             
            end
         | 
| 454 506 |  | 
| 507 | 
            +
             | 
| 455 508 | 
             
            def remote_files_matching(ftp, dir, regex)
         | 
| 456 509 | 
             
              ftp.ls(dir.to_s).map { |entry|
         | 
| 457 510 | 
             
                if match = entry.match(regex)
         | 
| @@ -499,9 +552,8 @@ def download_api_via_ftp | |
| 499 552 | 
             
              # At one point, we allowed the gem build to just find the most recent p4api build.
         | 
| 500 553 | 
             
              # P4Ruby probably shouldn't do that by default.
         | 
| 501 554 | 
             
              #version_dir = find_latest_version_dir(ftp)
         | 
| 502 | 
            -
              version_dir = P4API_VERSION_DIR
         | 
| 503 555 |  | 
| 504 | 
            -
              dir = ftp_download_dir( | 
| 556 | 
            +
              dir = ftp_download_dir(p4api_version_dir)
         | 
| 505 557 | 
             
              ftp.chdir(dir)
         | 
| 506 558 |  | 
| 507 559 | 
             
              puts "downloading #{filename} from #{dir} on ftp.perforce.com"
         | 
| @@ -536,9 +588,11 @@ set_platform_opts | |
| 536 588 | 
             
            # based solely on platform detection.
         | 
| 537 589 | 
             
            set_platform_cppflags
         | 
| 538 590 | 
             
            set_platform_cflags
         | 
| 591 | 
            +
            set_platform_cxxflags
         | 
| 539 592 |  | 
| 540 593 | 
             
            puts "$CPPFLAGS #{$CPPFLAGS}"
         | 
| 541 594 | 
             
            puts "$CFLAGS #{$CFLAGS}"
         | 
| 595 | 
            +
            puts "$CXXFLAGS #{$CXXFLAGS}"
         | 
| 542 596 |  | 
| 543 597 | 
             
            # Setup additional system library definitions based on platform type before
         | 
| 544 598 | 
             
            # we setup other libraries, in order to preserve linking order
         | 
| @@ -554,15 +608,17 @@ resolve_ssl_dirs | |
| 554 608 | 
             
            # If we happen to need SSL on Windows, we also need gdi32
         | 
| 555 609 | 
             
            if RbConfig::CONFIG['target_os'].downcase =~ /mingw/
         | 
| 556 610 | 
             
              have_library('gdi32') or raise
         | 
| 611 | 
            +
              have_library('ole32') or raise
         | 
| 612 | 
            +
              have_library('crypt32') or raise
         | 
| 557 613 | 
             
            end
         | 
| 558 614 |  | 
| 559 | 
            -
             | 
| 560 | 
            -
             | 
| 561 | 
            -
            unless do_ssl
         | 
| 562 | 
            -
              have_library('p4sslstub') or raise
         | 
| 563 | 
            -
            end
         | 
| 564 | 
            -
             | 
| 615 | 
            +
            have_library('crypto') or raise
         | 
| 616 | 
            +
            have_library('ssl') or raise
         | 
| 565 617 | 
             
            have_library('supp') or raise
         | 
| 618 | 
            +
            have_library('p4script_sqlite') or raise
         | 
| 619 | 
            +
            have_library('p4script_curl') or raise
         | 
| 620 | 
            +
            have_library('p4script') or raise
         | 
| 621 | 
            +
            have_library('p4script_c') or raise
         | 
| 566 622 | 
             
            have_library('rpc') or raise
         | 
| 567 623 | 
             
            have_library('client') or raise
         | 
| 568 624 |  | 
| @@ -577,4 +633,4 @@ create_p4rubyconf_header(version_info, $libs) | |
| 577 633 | 
             
            # don't believe we need to rely on actually.
         | 
| 578 634 | 
             
            create_header
         | 
| 579 635 |  | 
| 580 | 
            -
            create_makefile('P4')
         | 
| 636 | 
            +
            create_makefile('P4')
         | 
    
        data/ext/P4/p4.cpp
    CHANGED
    
    | @@ -314,6 +314,25 @@ static VALUE p4_set_enviro_file( VALUE self, VALUE rbstr ) | |
| 314 314 | 
             
                return Qtrue;
         | 
| 315 315 | 
             
            }
         | 
| 316 316 |  | 
| 317 | 
            +
            static VALUE p4_get_evar( VALUE self, VALUE var )
         | 
| 318 | 
            +
            {
         | 
| 319 | 
            +
                P4ClientApi	*p4;
         | 
| 320 | 
            +
                const StrPtr *val;
         | 
| 321 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 322 | 
            +
                val = p4->GetEVar( StringValuePtr( var ) );
         | 
| 323 | 
            +
                if( !val ) return Qnil;
         | 
| 324 | 
            +
             | 
| 325 | 
            +
                return P4Utils::ruby_string( val->Text() );
         | 
| 326 | 
            +
            }
         | 
| 327 | 
            +
             | 
| 328 | 
            +
            static VALUE p4_set_evar( VALUE self, VALUE var, VALUE val )
         | 
| 329 | 
            +
            {
         | 
| 330 | 
            +
                P4ClientApi *p4;
         | 
| 331 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 332 | 
            +
                p4->SetEVar( StringValuePtr( var ), StringValuePtr( val ) );
         | 
| 333 | 
            +
                return Qtrue;
         | 
| 334 | 
            +
            }
         | 
| 335 | 
            +
             | 
| 317 336 | 
             
            static VALUE p4_get_host( VALUE self )
         | 
| 318 337 | 
             
            {
         | 
| 319 338 | 
             
                P4ClientApi	*p4;
         | 
| @@ -642,7 +661,7 @@ static VALUE p4_run( VALUE self, VALUE args ) | |
| 642 661 |  | 
| 643 662 | 
             
                // Allocate storage on the stack so it's automatically reclaimed
         | 
| 644 663 | 
             
                // when we exit.
         | 
| 645 | 
            -
                char **p4args =  | 
| 664 | 
            +
                char **p4args = RB_ALLOC_N( char *, argc + 1 );
         | 
| 646 665 |  | 
| 647 666 | 
             
                // Copy the args across
         | 
| 648 667 | 
             
                for ( i = 0; i < argc; i++ )
         | 
| @@ -679,13 +698,6 @@ static VALUE p4_get_messages( VALUE self ) | |
| 679 698 | 
             
                return p4->GetMessages();
         | 
| 680 699 | 
             
            }
         | 
| 681 700 |  | 
| 682 | 
            -
            static VALUE p4_reset( VALUE self )
         | 
| 683 | 
            -
            {
         | 
| 684 | 
            -
                P4ClientApi *p4;
         | 
| 685 | 
            -
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 686 | 
            -
                return p4->Reset();
         | 
| 687 | 
            -
            }
         | 
| 688 | 
            -
             | 
| 689 701 | 
             
            static VALUE p4_get_warnings( VALUE self )
         | 
| 690 702 | 
             
            {
         | 
| 691 703 | 
             
                P4ClientApi	*p4;
         | 
| @@ -815,6 +827,58 @@ static VALUE p4_set_progress( VALUE self, VALUE progress ) | |
| 815 827 | 
             
                return p4->SetProgress( progress );
         | 
| 816 828 | 
             
            }
         | 
| 817 829 |  | 
| 830 | 
            +
            /*******************************************************************************
         | 
| 831 | 
            +
             * SSO handler support
         | 
| 832 | 
            +
             ******************************************************************************/
         | 
| 833 | 
            +
            static VALUE p4_get_enabled_sso( VALUE self )
         | 
| 834 | 
            +
            {
         | 
| 835 | 
            +
                P4ClientApi	*p4;
         | 
| 836 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 837 | 
            +
                return p4->GetEnableSSO();
         | 
| 838 | 
            +
            }
         | 
| 839 | 
            +
             | 
| 840 | 
            +
            static VALUE p4_set_enable_sso( VALUE self, VALUE enable )
         | 
| 841 | 
            +
            {
         | 
| 842 | 
            +
                P4ClientApi	*p4;
         | 
| 843 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 844 | 
            +
                return p4->SetEnableSSO( enable );
         | 
| 845 | 
            +
            }
         | 
| 846 | 
            +
             | 
| 847 | 
            +
            static VALUE p4_get_sso_vars( VALUE self )
         | 
| 848 | 
            +
            {
         | 
| 849 | 
            +
                P4ClientApi	*p4;
         | 
| 850 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 851 | 
            +
                return p4->GetSSOVars();
         | 
| 852 | 
            +
            }
         | 
| 853 | 
            +
             | 
| 854 | 
            +
            static VALUE p4_get_sso_passresult( VALUE self )
         | 
| 855 | 
            +
            {
         | 
| 856 | 
            +
                P4ClientApi	*p4;
         | 
| 857 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 858 | 
            +
                return p4->GetSSOPassResult();
         | 
| 859 | 
            +
            }
         | 
| 860 | 
            +
             | 
| 861 | 
            +
            static VALUE p4_set_sso_passresult( VALUE self, VALUE result )
         | 
| 862 | 
            +
            {
         | 
| 863 | 
            +
                P4ClientApi	*p4;
         | 
| 864 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 865 | 
            +
                return p4->SetSSOPassResult( result );
         | 
| 866 | 
            +
            }
         | 
| 867 | 
            +
             | 
| 868 | 
            +
            static VALUE p4_get_sso_failresult( VALUE self )
         | 
| 869 | 
            +
            {
         | 
| 870 | 
            +
                P4ClientApi	*p4;
         | 
| 871 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 872 | 
            +
                return p4->GetSSOFailResult();
         | 
| 873 | 
            +
            }
         | 
| 874 | 
            +
             | 
| 875 | 
            +
            static VALUE p4_set_sso_failresult( VALUE self, VALUE result )
         | 
| 876 | 
            +
            {
         | 
| 877 | 
            +
                P4ClientApi	*p4;
         | 
| 878 | 
            +
                Data_Get_Struct( self, P4ClientApi, p4 );
         | 
| 879 | 
            +
                return p4->SetSSOFailResult( result );
         | 
| 880 | 
            +
            }
         | 
| 881 | 
            +
             | 
| 818 882 | 
             
            /*******************************************************************************
         | 
| 819 883 | 
             
             * P4::MergeData methods. Construction/destruction defined elsewhere
         | 
| 820 884 | 
             
             ******************************************************************************/
         | 
| @@ -1269,6 +1333,8 @@ void	Init_P4() | |
| 1269 1333 | 
             
                rb_define_method( cP4, "set_env", 	RUBY_METHOD_FUNC(p4_set_env)     , 2 );
         | 
| 1270 1334 | 
             
                rb_define_method( cP4, "enviro_file", RUBY_METHOD_FUNC(p4_get_enviro_file), 0);
         | 
| 1271 1335 | 
             
                rb_define_method( cP4, "enviro_file=", RUBY_METHOD_FUNC(p4_set_enviro_file), 1);
         | 
| 1336 | 
            +
                rb_define_method( cP4, "evar", 	RUBY_METHOD_FUNC(p4_get_evar)     , 1 );
         | 
| 1337 | 
            +
                rb_define_method( cP4, "set_evar", 	RUBY_METHOD_FUNC(p4_set_evar)     , 2 );
         | 
| 1272 1338 | 
             
                rb_define_method( cP4, "host", 	RUBY_METHOD_FUNC(p4_get_host)    , 0 );
         | 
| 1273 1339 | 
             
                rb_define_method( cP4, "host=", 	RUBY_METHOD_FUNC(p4_set_host)    , 1 );
         | 
| 1274 1340 | 
             
                rb_define_method( cP4, "ignore_file",RUBY_METHOD_FUNC(p4_get_ignore) , 0 );
         | 
| @@ -1305,7 +1371,6 @@ void	Init_P4() | |
| 1305 1371 | 
             
                rb_define_method( cP4, "connect", 	RUBY_METHOD_FUNC(p4_connect)     , 0 );
         | 
| 1306 1372 | 
             
                rb_define_method( cP4, "connected?",RUBY_METHOD_FUNC(p4_connected)   , 0 );
         | 
| 1307 1373 | 
             
                rb_define_method( cP4, "disconnect", RUBY_METHOD_FUNC(p4_disconnect) , 0 );
         | 
| 1308 | 
            -
                rb_define_method( cP4, "reset",  RUBY_METHOD_FUNC(p4_reset), 0 );
         | 
| 1309 1374 |  | 
| 1310 1375 | 
             
                // Running commands - general purpose commands
         | 
| 1311 1376 | 
             
                rb_define_method( cP4, "run", 	RUBY_METHOD_FUNC(p4_run)         ,-2 );
         | 
| @@ -1343,6 +1408,16 @@ void	Init_P4() | |
| 1343 1408 | 
             
                rb_define_method( cP4, "progress", RUBY_METHOD_FUNC(p4_get_progress), 0);
         | 
| 1344 1409 | 
             
                rb_define_method( cP4, "progress=", RUBY_METHOD_FUNC(p4_set_progress), 1);
         | 
| 1345 1410 |  | 
| 1411 | 
            +
                // SSO handling
         | 
| 1412 | 
            +
                rb_define_method( cP4, "loginsso", RUBY_METHOD_FUNC(p4_get_enabled_sso), 0);
         | 
| 1413 | 
            +
                rb_define_method( cP4, "loginsso=", RUBY_METHOD_FUNC(p4_set_enable_sso), 1);
         | 
| 1414 | 
            +
                rb_define_method( cP4, "ssovars", RUBY_METHOD_FUNC(p4_get_sso_vars), 0);
         | 
| 1415 | 
            +
                rb_define_method( cP4, "ssopassresult", RUBY_METHOD_FUNC(p4_get_sso_passresult), 0);
         | 
| 1416 | 
            +
                rb_define_method( cP4, "ssopassresult=", RUBY_METHOD_FUNC(p4_set_sso_passresult), 1);
         | 
| 1417 | 
            +
                rb_define_method( cP4, "ssofailresult", RUBY_METHOD_FUNC(p4_get_sso_failresult), 0);
         | 
| 1418 | 
            +
                rb_define_method( cP4, "ssofailresult=", RUBY_METHOD_FUNC(p4_set_sso_failresult), 1);
         | 
| 1419 | 
            +
             | 
| 1420 | 
            +
             | 
| 1346 1421 | 
             
                // P4::MergeData class
         | 
| 1347 1422 | 
             
                cP4MD = rb_define_class_under( cP4, "MergeData", rb_cObject );
         | 
| 1348 1423 |  |